我的数据框df
包含一系列NA和字符串以及2个矩阵match
和value
,其中ncol
和nrow
相同。 match
包含df
我想将df
中的字符串替换为value
中的字符串。如果df
中的字符串与match
中的值匹配,则可以将其替换为value
中相同位置的字符串
我认为第一步是在df
中创建一个匹配位置的新dfdf1 <- which(df %in% match) #nothing valuable...
道歉,我的代码更少。
df <- as.data.frame(matrix(c("ab","bc",NA,"aa",NA,NA,"de","aa",NA,"bc","ab","ab"),ncol = 4))
match <- matrix(c("ab","bc","de","aa"),nrow = 2)
value <- matrix(c("Good","Bad","Average","Stop"),nrow = 2)
output <- as.data.frame(matrix(c("Good","Bad",NA,"Stop",NA,NA,"Average","Stop",NA,"Bad","Good","Good"),ncol = 4))
答案 0 :(得分:2)
这也应该有效
> m<-apply(df,2,function(x) match(x,match))
> df2<-as.data.frame(matrix(value[m],ncol =ncol(df),nrow=nrow(df)))
> df2
V1 V2 V3 V4
1 Good Stop Average Bad
2 Bad Average Stop Good
3 Average Stop Bad Good
答案 1 :(得分:1)
我们可以unlist
数据框和match
数据框的元素与m1
的元素一起使用,并使用索引从value
获取相应的值。
df[] <- value[match(unlist(df), m1)]
df
# V1 V2 V3 V4
#1 Good Stop Average Bad
#2 Bad <NA> Stop Good
#3 <NA> <NA> <NA> Good
注意:将match
重命名为m1
。
答案 2 :(得分:1)
我们可以将lapply
与match
一起使用。
df[] <- lapply(df, function(x) value[match(x, match)])
df
# V1 V2 V3 V4
#1 Good Stop Average Bad
#2 Bad <NA> Stop Good
#3 <NA> <NA> <NA> Good