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

时间:2016-04-18 10:39:52

标签: r

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

这就是我所拥有的:

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

提前谢谢!

2 个答案:

答案 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