R:用列名替换df / matrix值

时间:2014-11-26 11:36:47

标签: r matrix dataframe

我有一个非常稀疏的矩阵或数据框(有一些1和很多零)

col1   colAname   colBname   colCname ...
-----------------------------------------
text   0          1          0
text   1          0          0
...
text   0          0          0

我希望更换每个" 1"列名称的值,如此

col1   colAname   colBname   colCname ...
-----------------------------------------
text   0          colBname          0
text   colAname          0          0
...
text   0                 0          0

如果不使用for循环,是否有一种有效的方法? 提前谢谢

1 个答案:

答案 0 :(得分:2)

你可以尝试

 df[,-1][!!df[,-1]] <- colnames(df[,-1])[col(df[,-1])][!!df[,-1]]
 df
 # col1 colAname colBname colCname
 #1 text        0 colBname        0
 #2 text colAname        0        0
 #3 text        0        0        0

  df[,-1][!!df[,-1]] <- colnames(df)[t(t(df[,-1])*(2:ncol(df)))]

数据

 df <- data.frame(col1='text', colAname = c(0, 1, 0), 
                           colBname=c(1, 0, 0), colCname=0)