我想获取某些列的值。每行的列不同,并取决于另一列的值。下面的例子应该说明一切。
这就是我所拥有的:
id year data.2014 data.2015
1 2014 21 22
2 2015 23 24
这是我想要的:
id year data.2014 data.2015 data
1 2014 21 22 21
2 2015 23 24 24
提前谢谢!
答案 0 :(得分: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
另一种选择是处理长格式数据,然后通过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
答案 1 :(得分:1)
如果您的年份列以这种方式排序,您可以执行以下操作:
data <- data.frame(id=1:2, year=2014:2015, data.2014=c(21,23), data.2015=c(22,24))
tmp <- c()
for (i in 1:nrow(data)){
tmp <- c(tmp, data[i, 3+data$year[i]-2014])
}
data$test <- tmp
data