在R中使用colnames的ifelse命令

时间:2013-05-06 21:09:52

标签: r

我有一个如下所示的数据框:

  

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

非常感谢任何帮助。

1 个答案:

答案 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"