【发布时间】:2019-09-06 15:21:34
【问题描述】:
我想使用 summaryBy 并使用三个分组变量(我的公式右侧),但要汇总 170 个左右的变量(在我的情况下计算中位数)。如何在同一个公式中指定它们?
而不是打字
var1+var2+var3...
等等。我想我可以做一个这样的字符串。这本身就是一个完整的项目,但至少我现在存储了一个字符串,它是所有变量之间的加号。我称之为z1。
现在,在我的 summaryBy 脚本中简单地询问 z1 甚至 paste(z1) 不起作用:
d <- summaryBy(paste(z1) ~ year + month + ID,
data=..,
FUN=c(median,sum),
na.rm=TRUE)
给出错误:
tapply 中的错误(currVAR, rh.string.factor, function(x) { :
参数必须具有相同的长度
我想这与我在 summaryBy 中指定我的数据这一事实有关。但我是 R 新手,因此无法理解除此之外的问题。
我也按照建议尝试了另一种方法:
d<-summaryBy(paste(z1,"~year+month+ID"),
data=..,
FUN=c(median,sum),
na.rm=TRUE)
这反而给出了错误
.get_variables(formula, data, id, debug.info) 中的错误:'formula' 必须是公式或列表
所以不知道如何去那里。
来自帮助文档:
使用 cbind( ) 对多个变量进行计算 summaryBy(cbind(重量,饲料)~Evit + Cu,数据=子集(dietox,时间> 1), 有趣=有趣)
并对此进行测试,这次 z2 是一个由逗号分隔的所有变量的字符串。
d<-summaryBy(cbind(z2)~year+month+ID,
data=..,
FUN=c(median,sum),
na.rm=TRUE)
或变体
d<-summaryBy(cbind(paste(z2))~year+month+ID,
data=..,
FUN=c(median,sum),
na.rm=TRUE)
两者都给出了我上面最初尝试的参数长度错误。
另一个建议(感谢@akrun):
d<-summaryBy(as.formula(paste(z1,"~year+month+ID")),
data=..,
FUN=c(median,sum),
na.rm=TRUE)'
提醒:z1 是中间加号的变量。
在这种情况下,R 没有给出错误。似乎它正在加载或等待其他命令。控制台如下所示:
Screenshot of console
底部没有>.. 这是什么意思?
最终编辑和解决方案:
as.formula 方法奏效了!非常感谢!我现在明白了,如果控制台底部没有箭头,就像我上面的截图一样,这意味着 R 正在计算哈哈。
【问题讨论】:
标签: r