【问题标题】:ifelse command using colnames in R在 R 中使用 colnames 的 ifelse 命令
【发布时间】:2013-04-30 17:08:50
【问题描述】:

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

df1

名称(df1)

  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

任何帮助将不胜感激。

【问题讨论】:

  • df1<-data.frame(c(0,0,0),c(0,1,0),c(1,0,0)) names(df1)<-c("A","B","C") 可以替换为 df1<-data.frame(A=c(0,0,0),B=c(0,1,0),C=c(1,0,0)),仅供参考。

标签: r


【解决方案1】:

发生的情况是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"

【讨论】:

  • +1 - 也可以考虑ifelse(df1 == 1, colnames(df1)[col(df1)], "0")
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-06-19
  • 1970-01-01
  • 2020-04-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-06
相关资源
最近更新 更多