我有一个数据框如下
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
但无法弄明白。任何帮助表示赞赏
干杯!
答案 0 :(得分:2)
矩阵索引match
- 将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
答案 1 :(得分:1)
只有具有字母的列按字母顺序排列时才会起作用:
> 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