在R中用列名替换行值

在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")) 我想对每一行应用如下代码 If column name is equal to Z, replace value with NA 但是我想不出来。谢谢你的帮助

我有一个如下的数据框

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"))
我想对每一行应用如下代码

If column name is equal to Z, replace value with NA
但是我想不出来。谢谢你的帮助


干杯

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

df[cbind(seq(nrow(df)),match(df$z,colnames(df[1:3]))]只有当带有字母的列按字母顺序排列时,这才有效:

> 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
>df[cbind(1:5,as.numeric(df$z))]df
a b c z
1 NA 11 b
2 7不适用
3 NA 8 13 a
4 NA 9 14 a
5NA 15B

无需使用
rep()
-向量回收将处理它。是的。我得到了其他错误,并将其放入。尽管从未出现过长度不匹配的错误,这可能需要rep()。你的在其他方面也更好。
> 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