假设一个数据集,其中10名参与者填写了一份包含3个项目x,y和z的调查问卷。
ss <- data.frame(x=rnorm(10), y=rnorm(10), z=rnorm(10))
我想为每个人计算这些项目的平均值(个人均值)。 我可以这样轻松地做到这一点:
ss$personalmean <- rowMeans(ss[c("x", "y", "z")])
或者这样:
ss$personalmean <- apply(ss[c("x", "y", "z")], 1, mean)
但是假设我希望能够在with函数中执行此操作。然后我遇到了问题。
这有效:
with(ss, (x+y+z)/3)
但这不是:
with(ss, rowMeans(c(x,y,z)))
with(ss, apply(c(x,y,z), 1, mean))
我不明白为什么。这里的例子很简单,但简而言之,我想在函数apply()
中使用函数with()
。
如果有人在某个地方找到了这个问题的答案,那么道歉,但谷歌搜索我正在寻找的东西并不容易,因为“with”是一个非常通用的术语。
答案 0 :(得分:2)
正如评论中提到的@Frank,apply
和rowMeans
使用矩阵/ data.frame。因此,如果我们要使用with
而不是c
,cbind
会将其转换为matrix
,
with(ss, rowMeans(cbind(x,y,z)))
with(ss, apply(cbind(x,y,z), 1, mean))