我有一个非常稀疏的矩阵或数据框(有一些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
循环,是否有一种有效的方法?
提前谢谢
答案 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)