我有一个数据框:
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
答案 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"]]