r - R数据表:通过按名称引用其他列来修改列值
问题描述
我有一个融化的数据表,其中的一列包含引用同一表中其他列名的值。我想用引用列的行值替换同一列中的每一行。
library("data.table")
## Example input data table
DT_input <- data.table(A=c(1:10),
B=c(11:20),
C=c(21:30),
replace=c(rep("A", 5), rep("B", 3), rep("C", 2)))
## Desired output data table
DT_output <- data.table(A=c(1:10),
B=c(11:20),
C=c(21:30),
replace=c(1:5, 16:18, 29:30))
由于 for 循环,此处显示的旧方法非常慢:
## Attempted looping solution
for (kRow in seq_len(nrow(DT_input))) {
e <- parse(text = DT_input[kRow, Variable])
DT_input[kRow, Variable := eval(e)]
}
解决方案
如果我们需要矢量化方法,请使用row/column
索引base R
i1 <- cbind(seq_len(nrow(df1)), match(df1$replace, names(df1)[-4]))
df1$replace <- df1[-4][i1]
df1$replace
#[1] 1 2 3 4 5 16 17 18 29 30
使用data.table
, 选项是Map
或for
没有 的循环eval
,但它仍然不会被矢量化
数据
df1 <- as.data.frame(DT_input)
推荐阅读
- excel - 基于 Excel 范围更新/更改的自动电子邮件
- python - python selenium.webdriver 返回“在此服务器上找不到请求的文档”的结果
- python - 有没有办法将分散的数据插入到复杂的 3d 网格上?
- android - 向所有群组和用户发送消息 Telegram
- shell - bin/ksh cat 语句未分配给变量
- http - 将多个 toJson 方法合并为一个请求
- python - 为什么 pandas isnull() 有效但 ==None 无效?
- c# - 使用 IEnumerator 时的 Dispose 是什么?
- java - 缓慢的 Swing GUI 启动时间
- regex - 通过 Google 表格上的公式删除变音符号(第 2 部分)