我有这样的df:
a <- c(4,5,3,5,1)
b <- c(8,9,7,3,5)
c <- c(6,7,5,4,3)
df <- data.frame(rbind(a,b,c))
我想要一个新的df,df2,它包含行a和b中每个单元格中的值与各自列中行c中的值之间的差异。
df2看起来像这样:
a <- c(-2,-2,-2,1,-2)
b <- c(2,2,2,-1,2)
df2 <- data.frame(rbind(a,b))
这就是我被卡住的地方:
df2 <- data.frame(apply(df,c(1,2),function(x) x - df[nrow(df),the col index of x]))
如何引用x的列索引?是否有类似JavaScript this
的内容?
答案 0 :(得分:0)
我们可以通过复制第3行来使这些长度相等,然后再减去前两行
out <- df[c("a", "b"),] - df["c",][col(df[c("a", "b"),])]
identical(df2, out)
#[1] TRUE
或明确使用rep
df[c("a", "b"),] - rep(unlist(df["c",]), each = 2)