首页 > 解决方案 > R data.table 函数根据同一行上的引用列号复制值

问题描述

我有一个如下所示的 data.table:

| key | zone_1 | zone_2 | zone_3 |  v1  |  v2  |
|  A  |   4.3  |   6.9  |   12.0 |   2  |      |
|  B  |   3.7  |   5.2  |    9.7 |   4  |      |

我需要一个函数,它将 v1 中引用的列的值复制到 v2 的每一行,所以它看起来像这样:

| key | zone_1 | zone_2 | zone_3 |  v1  |  v2  |
|  A  |   4.3  |   6.9  |   12.0 |   2  |  4.3 |
|  B  |   3.7  |   5.2  |    9.7 |   4  |  9.7 |

标签: rdata.tableapplydplyr

解决方案


您可以为子集提供一个双列矩阵,df其中第一列指定行,第二列指定列。

# setDF(df) if df is a data.table class object

df$v2 <- df[cbind(seq(nrow(df)), df$v1)]

df
#   key zone_1 zone_2 zone_3 v1   v2
# 1   A    4.3    6.9   12.0  2  4.3
# 2   B    3.7    5.2    9.7  4  9.7

使用的数据

structure(list(key = c("A", "B"), zone_1 = c(4.3, 3.7), zone_2 = c(6.9, 
5.2), zone_3 = c(12, 9.7), v1 = c(2L, 4L), v2 = c("4.3", " 9.7"
)), row.names = c(NA, -2L), class = "data.frame")

推荐阅读