提问人:Albert Ai 提问时间:5/30/2020 更新时间:5/30/2020 访问量:41
为什么这个 R 脚本没有像我认为的那样对矩阵进行排序?
Why isn't this R script sorting through the matrix like I think it's supposed to?
问:
我是新手,所以我还不知道它的所有来龙去脉,但我认为代码应该可以工作。它应该查看从 .csv 文件中读取的不同身高、体重和收入水平的人的矩阵,然后删除任何值为 NA 或任何值不在特定给定范围内(例如身高为 4.5 到 6.5)的任何行。当我运行脚本时,有些人被删除了,但仍有人的 NA 值或值超出给定范围,所以我不知道它是否只删除了一定数量的不适合的人,或者它是否完全删除了错误的人,或者两者兼而有之。
original = read.csv("C:/Users/gsbal/OneDrive/Documents/Quants R Course/HW/A2-C-DirtyData.csv")
nums = 1:nrow(original)
toDelete = 0
deleted = 0
for (i in nums)
{
na = is.na(original[i, 1]) | is.na(original[i, 2]) | is.na(original[i, 3])
if (na == T)
{
toDelete = i - deleted
original = original[-toDelete,]
deleted = deleted + 1
}
}
nums = 1:nrow(original)
toDelete = 0
deleted = 0
for (i in nums)
{
height = original[i, 1] < 4.5 | original[i, 1] > 6.5
if (height == T)
{
toDelete = i - deleted
original = original[-toDelete,]
deleted = deleted + 1
}
}
答:
2赞
Limey
5/30/2020
#1
R 的一大优势是它适用于数据列,而不是单个值。因此,您应该能够在不求助于循环的情况下完成所有您想做的事情。我推荐作为一个几乎总是有帮助的软件包。用其开发人员的话来说,它是“固执己见的”——确实如此——但它也非常好。tidyverse
不幸的是,您没有给我们一个简单的独立示例,因此我无法测试我的代码,但是像这样的东西应该会删除任何列中带有 a 的数据的任何行。[如果您想了解更多关于简单的独立示例和响应,请参阅此帖子。NA
library(tidyverse)
modified <- original %>% drop_na()
这有多简单?您可以通过类似的方式实现范围检查:
modifiedAgain <- modified %>% filter(height < 4.5 | height > 6.5)
评论
dput(original)
dput(head(original, n))
n
original