2

我有一个看起来像这样的数据框:

df1<-data.frame(c(0,0,0),c(0,1,0),c(1,0,0))

名称(df1)<-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

任何帮助将不胜感激。

4

1 回答 1

4

发生的事情是ifelse每列运行一次,当涉及到替换元素时,它需要colnames. 但是因为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"
于 2013-05-06T21:22:31.967 回答