按R中的列名替换行值

时间:2014-12-18 23:45:20

标签: r

我有一个数据框如下

df<- data.frame(a = c(1,2,3,4,5), 
                b = c(6,7,8,9,10), 
                c = c(11,12,13,14,15), 
                z = c("b","c","a","a","b"))

我试图替换该行的列名等于列Z中的值的行值。所需的输出低于

   a  b  c z
1  1 NA 11 b
2  2  7 NA c
3 NA  8 13 a
4 NA  9 14 a
5  5 NA 15 b

我在考虑将以下代码应用于每一行

If column name is equal to Z, replace value with NA

但无法弄明白。任何帮助表示赞赏

干杯!

2 个答案:

答案 0 :(得分:2)

矩阵索引match - 将z列添加到colnames

df[cbind(seq(nrow(df)),match(df$z,colnames(df[1:3])))] <- NA
df

   a  b  c z
1  1 NA 11 b
2  2  7 NA c
3 NA  8 13 a
4 NA  9 14 a
5  5 NA 15 b

答案 1 :(得分:1)

只有具有字母的列按字母顺序排列时才会起作用:

> df[cbind(1:5,as.numeric(df$z))] <- rep(NA,5)
> df
   a  b  c z
1  1 NA 11 b
2  2  7 NA c
3 NA  8 13 a
4 NA  9 14 a
5  5 NA 15 b