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儿童
putdata.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