如何根据列中的值选择列?

lil*_*ets 0 r

我想从某些列中获取值.每行的列不同,并取决于另一列的值.下面的例子应该说明一切.

这就是我所拥有的:

id   year   data.2014   data.2015
1    2014   21          22
2    2015   23          24
Run Code Online (Sandbox Code Playgroud)

这是我想要的:

id   year   data.2014   data.2015   data
1    2014   21          22          21
2    2015   23          24          24
Run Code Online (Sandbox Code Playgroud)

先感谢您!

Dav*_*urg 5

您可以通过在列名称中添加并匹配它data.df$year对其进行矢量化

indx <- match(paste0("data.", df$year), names(df))
df$data <- df[cbind(1:nrow(df), indx)]
df
#   id year data.2014 data.2015 data
# 1  1 2014        21        22   21
# 2  2 2015        23        24   24
Run Code Online (Sandbox Code Playgroud)

另一个选择是处理长格式数据,然后通过加入回原始数据 id

library(data.table)
indx <- melt(setDT(df), id = 1:2)[variable == paste0("data.", year), .(id, value)]
df[indx, data := i.value, on = "id"]
df
#    id year data.2014 data.2015 data
# 1:  1 2014        21        22   21
# 2:  2 2015        23        24   24
Run Code Online (Sandbox Code Playgroud)