我想从某些列中获取值.每行的列不同,并取决于另一列的值.下面的例子应该说明一切.
这就是我所拥有的:
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)
先感谢您!
您可以通过在列名称中添加并匹配它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)