在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