right_join and mutate不保留R中的索引

right_join and mutate不保留R中的索引,r,dataframe,dplyr,tidyverse,tibble,R,Dataframe,Dplyr,Tidyverse,Tibble,我正在将列\u数据映射到主数据,如果主数据中存在列值,则将其保存为键 例如:P的父项和C的子项 问题是我得到了输出,但输出的索引不同 数据 column_data <- c("", "", "", "", "", "", "", "", "", "", "", "

我正在将
列\u数据
映射到
主数据
,如果主数据中存在列值,则将其保存为键
例如:
P的父项
C的子项

问题是我得到了输出,但输出的索引不同

数据

column_data <- c("", "", "", "", "", "", "", "", "", "", "", "", "", "", "", 
"", "P", "C", "C")
但我得到的却是输出:

structure(list(values = c("P", "C", "C", "", "", "", "", "", 
"", "", "", "", "", "", "", "", "", "", ""), ind = c("Parent", 
"Child", "Child", NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA), output = c("Parent", "Child", "Child", "", 
"", "", "", "", "", "", "", "", "", "", "", "", "", "", "")), row.names = c(NA, 
-19L), class = "data.frame")

使用
dplyr
,如果执行
右连接(x,y)
,则结果将包括
x
的匹配行子集,然后是
y
的不匹配行

根据关于变异联接的R文档,返回的值将是:

与x类型相同的对象。的行和列的顺序 尽可能多地保留x。输出具有以下特性 特性:

对于internal_join(),是x行的子集。对于left_join(),所有x行。对于 right_join(),x行的子集,后跟不匹配的y行。对于 full_join(),所有x行,后跟不匹配的y行

这就是为什么在结果data.frame的开头有3个匹配的行

要获得保留
df
行顺序的所需结果,请按如下方式尝试
left\u join

df2 <- stack(master) %>% 
  type.convert(as.is = TRUE) 

df %>%
  left_join(df2, by = c('column' = 'values')) %>%
  mutate(output = coalesce(ind, column))
df2%
type.convert(as.is=TRUE)
df%>%
左联合(df2,by=c('column'='values'))%>%
突变(输出=合并(索引,列))
输出

   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
列ind输出
1.
2.
3.
4.
5.
6.
7.
8.
9
10
11
12
13
14
15
16
17 P父母
18 C儿童
19 C儿童

put
data.frame(“column”=column\u data)
放在左边?左边的地方。。。。?
structure(list(values = c("P", "C", "C", "", "", "", "", "", 
"", "", "", "", "", "", "", "", "", "", ""), ind = c("Parent", 
"Child", "Child", NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA), output = c("Parent", "Child", "Child", "", 
"", "", "", "", "", "", "", "", "", "", "", "", "", "", "")), row.names = c(NA, 
-19L), class = "data.frame")
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