将值替换为其各自列的名称

时间:2014-11-02 19:25:33

标签: r dataframe

我有一个数据框:

Code    401k    CVS
101A            true
231N    true
FD54    true
99JB    
85F4    true

我正在尝试用相应的列名替换“true”字符值(例如“401k”)。这是我想要的输出:

Code    401k    CVS
101A            CVS
231N    401k
FD54    401k
99JB    
85F4    401k

2 个答案:

答案 0 :(得分:2)

第一种方法是在不首先将数据强制转换为字符的情况下执行此操作:

wc <- droplevels(col(df, as.factor=TRUE)[which(df == "true")])
df[levels(wc)] <- Map(factor, df[levels(wc)], labels = levels(wc))
df
#   Code  401k  CVS
# 1 101A  <NA>  CVS
# 2 231N  401k <NA>
# 3 FD54  401k <NA>
# 4 99JB  <NA> <NA>
# 5 85F4  401k <NA>

或者您可以将which与数据框索引一起使用,并将所有内容转换为字符:

df[] <- lapply(df, function(x) levels(x)[x])
w <- which(df == "true", arr.ind = TRUE)
df[w] <- names(df)[w[,"col"]]
df
#   Code  401K  CVS
# 1 101A  <NA>  CVS
# 2 231N  401K <NA>
# 3 FD54  401K <NA>
# 4 99JB  <NA> <NA>
# 5 85F4  401K <NA>

答案 1 :(得分:2)

下面的编码使我能够更换每个&#34; true&#34;值(字符)到其各自的列名中。

##Replace every "true" value with its respective column name
w <- which(df=="true",arr.ind=TRUE)
df[w] <- names(df)[w[,"col"]]