我有一个如下所示的数据框:
DF1< -data.frame(C(0,0,0),C(0,1,0),C(1,0,0))
名称(DF1)LT; -c( “A”, “B”, “C”)
A B C
1 0 0 1
2 0 1 0
3 0 0 0
我想用df1中的“1”值替换与这些值关联的列名,以创建如下所示的数据框:
A B C
1 0 0 C
2 0 B 0
3 0 0 0
我尝试了以下代码,但它产生了错误的数据框(如下所示):
data.frame(ifelse(DF == 1,colnames(DF),0))
A B C
1 0 0 A
2 0 B 0
3 0 0 0
非常感谢任何帮助。
答案 0 :(得分:4)
正在发生的事情是ifelse
每列运行一次,当涉及替换元素时,它需要colnames
的第n个元素。但是因为ifelse
一次在每列上运行,所以索引colnames
最终匹配行索引,而不是列索引。为了获得正确的解决方案,ifelse需要在行向量上运行,而不是在列向量上运行。
这是一个使用t(转置)函数的解决方案。
t(ifelse(t(df1)==1,names(df1),0))
A B C
[1,] "0" "0" "C"
[2,] "0" "B" "0"
[3,] "0" "0" "0"