首页 > 解决方案 > 在 R 的应用函数中引用 x 的列

问题描述

我有一个这样的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吗?

标签: r

解决方案


我们可以通过复制第三行来轻松做到这一点,以使长度相等,然后再减去前两行

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)

推荐阅读