r - 在 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
吗?
解决方案
我们可以通过复制第三行来轻松做到这一点,以使长度相等,然后再减去前两行
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)
推荐阅读
- java - 如何在 Android 中将字体设置为 CustomView 的文本?
- sql-server - SQL Server:如何获取未知数量的字段作为列名?
- modal-dialog - How to open a modal component from inside of another modal component without having a circular dependency?
- python - 从熊猫数据框中提取重复
- wordpress - 安装失败:无法创建目录
- pyspark - 如何在数据框中的行数上循环pyspark数据框
- .net - 为什么 RSAEncryptionPadding.OaepSHA256 出现 RSA 加密错误?
- sql - 在 case 语句中设置条件
- javascript - 如何捕获输入到表格行组件中的数据
- c# - 如何使用 .net 中的充气城堡使用 RSA/ECB/OAEPWithSHA256AndMGF1Padding 进行加密?