替换数据框中与矩阵中的字符串匹配的字符串

时间:2017-03-10 08:15:22

标签: r string matrix replace match

我的数据框df包含一系列NA和字符串以及2个矩阵matchvalue,其中ncolnrow相同。 match包含df

中所有可能的字符串

我想将df中的字符串替换为value中的字符串。如果df中的字符串与match中的值匹配,则可以将其替换为value 中相同位置的字符串

我认为第一步是在df

中创建一个匹配位置的新df
df1 <- 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)) 

3 个答案:

答案 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)

我们可以将lapplymatch一起使用。

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