R:for循环错误

时间:2017-11-17 18:56:20

标签: r loops

我试图删除数据框列中的NA值,并尝试cbind生成的向量另一个数据帧。以下是我使用的代码:

for (x in df_wide[4:8]) {
  a <- df_wide[[x]][!is.na(df_wide[[x]])]
  df <- cbind(df, a)
}

但是我收到了这个错误:

`Error in .subset2(x, i, exact = exact) : no such index at level 1`

我也尝试过使用apply功能,但我遇到了同样的错误。

`Error in .subset2(x, i, exact = exact) : no such index at level 1`
function (x, i, exact) 
if (is.matrix(i)) as.matrix(x)[[i]] else .subset2(x, i, exact = exact)

任何人都可以解释一下为什么我会收到此错误,我该如何解决?

如果您想查看数据框,请参阅我的previous question.

提前致谢。

2 个答案:

答案 0 :(得分:1)

您只需指定for (x in 4:8)即可。或者您可以引用列名,但是现在您使用列作为索引,这仅对整数列有用(如果这是您的目标)。

我不认为这种方式是解决问题的最好方法。

答案 1 :(得分:1)

  

for(x in df_wide [4:8])

将整个结果放在x中。所以x等于该列的整个向量。例如:x < - df_wide [4],然后x < - df_wide [5],然后......等等。

  

a&lt; - df_wide [[x]] [!is.na(df_wide [[x]])]

说你应该找到df_wide [[]]的值向量(没有标题),其中列号是df_wide [4](或5或6或7)的整个向量。但是列号(单数)不能是x向量中的所有值

执行此操作的类似方法是this post you can search for using "omit NA values"

  

df_out <- df_wide[complete.cases(df_wide[,4:8]),]

检查列4:8中的案例是否完整,然后返回df_wide中行为完整案例的所有列。