按列名中的R

按列名中的R

问题描述:

更换行值我有一个数据帧,如下按列名中的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 

但CA下面的代码不知道。任何帮助赞赏

干杯!

矩阵索引match -ing的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 
+0

太棒了!这工作完美,谢谢! – Arc121 2014-12-19 00:25:12

这只会工作,如果用字母列是lexigraphic顺序:

> 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 
+0

不需要'rep()' - vector的回收将会照顾它。 – thelatemail 2014-12-19 00:13:56

+0

是的。我收到了其他错误并将其放入。虽然长度不匹配会导致需要rep()。你的其他方面也更好。 – 2014-12-19 00:28:55