合并R中的数据帧:结果未排序。
这是基于上的一个示例。 我想将多个数据帧合并到一个公共列中——可以通过链接上提供的示例来实现这一点。 但使用参数合并R中的数据帧:结果未排序。,r,sorting,dataframe,merge,R,Sorting,Dataframe,Merge,这是基于上的一个示例。 我想将多个数据帧合并到一个公共列中——可以通过链接上提供的示例来实现这一点。 但使用参数sort=TRUE似乎没有效果。以下是简短的、可复制的代码: x <- data.frame(i = c("m","b","c"), j = 1:3) y <- data.frame(i = c("n","c","d"), k = 4:6) z <- data.frame(i = c("o","d","a"), l = 7:9) 给我 i j k l 1
sort=TRUE
似乎没有效果。以下是简短的、可复制的代码:
x <- data.frame(i = c("m","b","c"), j = 1:3)
y <- data.frame(i = c("n","c","d"), k = 4:6)
z <- data.frame(i = c("o","d","a"), l = 7:9)
给我
i j k l
1 b 2 NA NA
2 c 3 5 NA
3 m 1 NA NA
4 d NA 6 8
5 n NA 4 NA
6 a NA NA 9
7 o NA NA 7
将所有这些与排序合并:
Reduce(function(dtf1, dtf2) merge(dtf1, dtf2, by = "i", all = TRUE),
list(x,y,z))
Reduce(function(dtf1, dtf2) merge(dtf1, dtf2, by = "i", all = TRUE,sort = TRUE),
list(x,y,z))
给我和上面一样的结果。我知道我可以在合并后对数据帧进行排序(我想可能更有效),但是为什么sort=TRUE
没有效果呢
我在Mac上运行RStudio下的R3.4.3。
谢谢
Rafael两个函数调用显示相同行为的原因是sort=T是merge函数的默认操作 排序顺序不符合要求的原因是在Reduce函数中嵌入了merge函数 排序对于每个单独的联接都是正确的,但对于由Reduce步骤创建的整个结果表则不正确 你试过dplyr吗?为什么要使用reduce和merge 您可以通过以下方式实现同样的效果:
if(!irequire(dplyr)){install.packages('dplyr')}; require(dplyr)
x %>%
left_join(y, by = 'i') %>%
left_join(z, by = 'i') %>%
arrange(...whatever order you wish said the Djinn...)
默认的merge()
函数调用假定sort=TRUE
,因此您的第一个代码是等价的:merge(dtf1,dtf2,by=“i”,all=TRUE,sort=TRUE)
R文档说明当sort=TRUE
时,结果按列进行排序,因此在您的情况下,它是在第一个数据帧中的m
、b
和c
之间进行排序(按该顺序产生b、c、m),然后排序n
、c
、d
(按该顺序生成c、d、n),然后对o
、d
、a
(按该顺序生成a、d、o)
当您连接(c()
)或通过rbind()
将它们组合在一起时,您会得到一个列表,结果是“b,c,m,c,d,n,a,o”。d'oh
列i
是一个因素,而不是一个字符
阅读本文:帮助我将键列转换为可排序的值,并解决了这个问题
感谢您的评论和回答。在merge()
中sort=
的默认值为TRUE
。请尝试sort=FALSE
。