如何使用 for 或 while 循环来过滤数据帧?

时间:2021-01-28 16:58:31

标签: r dataframe loops

对于我们学习如何使用 R 的大学课程,我们必须过滤提供的数据框(称为犯罪)。原始数据框有 8 列。

我不认为我可以提供数据集,因为它是学校作业的一部分。但任何建议都会非常感谢。

任务的要求是使用循环和 if 语句,过滤一列(“类别”)并仅获取具有一个特定级别(14 个)(名为“药物”)的行。然后只将这些行的八列中的三列打印到新的数据框中。

for (i in crimes$category) {
  if (i == "drugs") {
    drugs <- rbind(drugs, crimes[c(2,3,7)]) 
  }
}  

现在我知道问题出在 rbind 函数中,因为它现在只是将所有行复制 160 次(有 160 行属于“药物”类别。但我不知道如何获得具有 160 个观察值的数据框,并且只有3 个变量。

我不认为我可以提供数据集,因为它是学校作业的一部分。但任何建议都会非常感谢。

1 个答案:

答案 0 :(得分:0)

请注意,赋值违背了使用 R 的目的。不过,使用 for / if 构造来获取包含类别值“药物”的行号,然后在外部创建结果 df循环:

keep <- integer()
for (i in crimes$category) {
  if (i == "drugs") {
    keep <- c(keep, i)
  }
}  

crimes2 <- crimes[keep, c(2,3,7)]

注意基本的 R 无循环解决方案是:

crimes2 <- crimes[crimes$category == "drugs", c(2,3,7)]