按列名中的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
答
这只会工作,如果用字母列是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
太棒了!这工作完美,谢谢! – Arc121 2014-12-19 00:25:12