作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这是我的真实数据集的一个简单数据框:
df <- data.frame(ID=rep(101:102,each=9),phase=rep(1:3,6),variable=rep(LETTERS[1:3],each=3,times=2),mm1=c(1:18),mm2=c(19:36),mm3=c(37:54))
我想首先按ID和变量进行分组,然后对于值(mm1,mm2,mm3),从所有阶段(phase1到phase3)中减去第3阶段,这将使第1阶段中的mm(1-3)全部为-2,第2阶段全部为-1,第3阶段全部为0。
R 抛出错误“Ops.data.frame(x, x[3, ]) 中的错误: - 仅针对同等大小的数据帧定义”正如我所尝试的:
df1 <- ddply(df, .(ID, variable), function(x) (x - x[3,]))
如有任何建议,我们将不胜感激。输出应如下所示:
ID phase variable mm1 mm2 mm3
101 1 A -2 -2 -2
101 2 A -1 -1 -1
101 3 A 0 0 0
101 1 B -2 -2 -2
101 2 B -1 -1 -1
101 3 B 0 0 0
101 1 C -2 -2 -2
101 2 C -1 -1 -1
101 3 C 0 0 0
102 1 A -2 -2 -2
102 2 A -1 -1 -1
102 3 A 0 0 0
102 1 B -2 -2 -2
102 2 B -1 -1 -1
102 3 B 0 0 0
102 1 C -2 -2 -2
102 2 C -1 -1 -1
102 3 C 0 0 0
最佳答案
好吧,我花了一点时间才弄清楚你想要什么,但这里有一个解决方案:
cols.to.sub <- paste0("mm", 1:3)
df1 <- ddply(
df, .(ID, variable),
function(x) {
x[cols.to.sub] <- t(t(as.matrix(x[cols.to.sub])) - unlist(x[x$phase == 3, cols.to.sub]))
x
} )
这会产生(前 6 行):
ID phase variable mm1 mm2 mm3
1 101 1 A -2 -2 -2
2 101 2 A -1 -1 -1
3 101 3 A 0 0 0
4 101 1 B -2 -2 -2
5 101 2 B -1 -1 -1
6 101 3 B 0 0 0
一般来说,调试此类问题的最佳方法是将 browser()
语句放入您传递给 ddply
的函数中,这样您就可以检查闲暇时的元素。这样做会揭示:
mm
列不是前三列(因此需要定义 cols.to .sub
)t
(转置),因为矢量回收是按列进行的。关于具有多个变量的 R ddply,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22239745/
COW 不是奶牛,是 Copy-On-Write 的缩写,这是一种是复制但也不完全是复制的技术。 一般来说复制就是创建出完全相同的两份,两份是独立的: 但是,有的时候复制这件事没多大必要
我是一名优秀的程序员,十分优秀!