【发布时间】:2020-01-31 18:00:21
【问题描述】:
我想遍历数据集中的列并使用列的名称来聚合数据集。但是,当我尝试将列名输入聚合函数时出现错误:
"model.frame.default(formula = cbind(SurveyID) ~ Panel + Category + 中的错误: 可变长度不同(为 'i' 找到)"
一旦我可以存储这是一个临时文件,我会将临时文件添加到永久数据集;但是,我无法通过这部分。任何帮助将不胜感激!
#example of my data:
df <- data.frame("SurveyID" = c('A','B','C','D'), "Panel" = c('E','E','S','S'), "Category" = c(1,1,2,3), "ENG" = c(3,3,1,2), "PAR"
= c(3,1,1,2), "REL" = c(3,1,1,2), "CLC"= c(3,1,1,2))
#for loop to get column name to include as part of the aggregate function
for (i in colnames(df[4:7])) {
print (i)
temp <- data.frame(setNames(aggregate(cbind(SurveyID) ~ Panel + Category + i, data = df, FUN = length), c("Panel","GENDER", "Favlev", "Cnt")))
}
【问题讨论】:
-
我相信这种情况正在发生,因为您在循环中拥有的 i 不在您为其制定该公式的数据框的范围内。我认为
aggregate使用非标准评估来找到公式的值。或者,您可以在调用聚合之前制定公式,例如as.formula(paste(...+ Category + i)) -
你可以尝试用
df[[i]]替换“i” -
替换 df[[i]] 有效。我还在学习 R-为什么它需要双 []。我在发布之前只使用了一个 [] 进行了尝试,但也出现了错误。
-
单
[ ]正在寻找索引号,双[[ ]]将接受将取一个名称,在这种情况下很有用。请参阅?[[了解更多信息 -
@Dave2e "[" 和 "[[" 都可以接受名称参数。它们的不同之处在于返回值的类型。
标签: r for-loop aggregate columnname