2014-12-18 50 views
4

更換行值我有一個數據幀,如下按列名中的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下面的代碼不知道。任何幫助讚賞

乾杯!

回答

2

矩陣索引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

1

這隻會工作,如果用字母列是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