问题描述
我正在将column_data
映射到master
,并且如果主@R_502_6274@中存在列值,则将其保存为密钥
例如:{{1}的Parent
和P
的{{1}}
数据
Child
C
column_data <- c("","","P","C","C")
这应该是输出:
master <- list("Parent" = c("P"),"Child" = c("C")
)
但是相反,我将其作为输出:
library(dplyr)
df <- data.frame("column" = column_data)
df <-stack(master) %>%
type.convert(as.is = TRUE) %>%
right_join(df,by = c('values' = 'column')) %>%
mutate(output = coalesce(ind,values))
解决方法
对于dplyr
,如果您执行right_join(x,y)
,则结果将包括x
的匹配行的子集,然后是y
的不匹配行的子集。
从R文档中有关变异联接的文档中,返回的值为:
与x具有相同类型的对象。的行和列的顺序 x尽可能保留。输出具有以下内容 属性:
对于inner_join(),是x行的子集。对于left_join(),所有x行。对于 right_join(),x行的子集,后跟不匹配的y行。对于 full_join(),全部x行,后跟不匹配的y行。
这就是为什么在结果data.frame的开头有3个匹配的行。
要获得期望的结果并保留df
的行顺序,请尝试使用left_join
,如下所示:
df2 <- stack(master) %>%
type.convert(as.is = TRUE)
df %>%
left_join(df2,by = c('column' = 'values')) %>%
mutate(output = coalesce(ind,column))
输出
column ind output
1 <NA>
2 <NA>
3 <NA>
4 <NA>
5 <NA>
6 <NA>
7 <NA>
8 <NA>
9 <NA>
10 <NA>
11 <NA>
12 <NA>
13 <NA>
14 <NA>
15 <NA>
16 <NA>
17 P Parent Parent
18 C Child Child
19 C Child Child