如果匹配列名,则将单元格复制到一行

时间:2016-08-22 18:51:05

标签: r

我搜索了一会儿试图解决这个问题,但遗憾的是找不到答案。

在我的数据框中,最后一列包含与列名匹配的字符串。我想创建另一列,每列返回(复制)与该列名匹配的值。

例如,说我的数据是:

col1 <- c(1, 4, 6, 0, 5)
col2 <- c(4, 6, 7, 8, 6)
col3 <- c(0, 4, 2, 2, 1)
col4 <- c("col1", "col1", "col2", "col3", "col1")
df <- data.frame(col1, col2, col3, col4)

我想要实现的是col5,它复制每行的相关单元格:

col1  col2  col3  col4  col5
1     4     0     col1  1
4     6     4     col1  4
6     7     2     col2  7
0     8     2     col3  2
5     6     1     col1  5

基本上它会查看col4并返回与该列名匹配的同一行的值。

这显然是我数据的一个非常简化的版本,这就是为什么我想自动化它。 我真的很感激任何帮助:)

1 个答案:

答案 0 :(得分:0)

我们可以使用row/col索引从数据集中提取元素以创建'col5'。

df$col5 <- df[-4][cbind(1:nrow(df), match(as.character(df$col4), colnames(df)))]
df$col5
#[1] 1 4 7 2 5