繁体   English   中英

在R中使用merge()时如何避免出现更多行数据的问题?

[英]How to avoid problems with more rows of data when using merge() in R?

对于这个问题,我已经走了很多篇文章,但我还无法生成所需的数据框。

我有两个要合并的数据框。 但是,使用merge功能后,会产生更多的数据行。

最终应该有6行(对于此示例),但是所有命令都给出36行。 是因为由于我将2列用于merge功能,所以可能重复了吗?

这些是我的数据,这是我已经尝试过的。

a <- structure(list(month = c(1L, 1L, 1L, 1L, 1L, 1L), site = c("Port", 
"Port", "Port", "Port", "Port", "Port"), max = c(17.1530908785179, 
17.6490466820266, 19.8794824562496, 16.6000416246619, 15.8144630183894, 
14.4950690162599)), row.names = c(NA, -6L), class = c("tbl_df", 
"tbl", "data.frame"))

b <- structure(list(month = c(1, 1, 1, 1, 1, 1), site = c("Port", 
"Port", "Port", "Port", "Port", "Port"), slope = c(0.189564181246092, 
0.142842264473357, 0.135918209518515, 0.152899782597735, 0.223283613118016, 
0.177886719032959)), row.names = c(NA, 6L), class = "data.frame")

我试过的

merge(a, b, by=c("month", "site"))

merge(a, b, by=c("month", "site"), all=TRUE)

unique(a) %>%
merge(b, by=c("month", "site"), all =TRUE)

left_join(a, b, by=c("month", "site"))

right_join(a, b, by=c("month", "site"))

我不确定我缺少什么。 有关问题出在哪里以及如何解决的任何指示都将非常有帮助。 谢谢。

问题是,对于数据帧中的每个条目,按月和站点合并是“ 1”或“端口”。 现在,merge命令获取数据框b的第一个条目,并检查数据框a中的月份和站点是否匹配。 因为数据框a中的每个条目都是匹配项(同样,站点和月份的每个条目都相同),所以它将数据框b的第一个条目合并到数据框a中的所有条目。 它对数据帧b中的每个条目执行6次。 因此,您有一个包含36个条目的数据框。

如果只想将数据帧拍在一起,则可以使用cbind:

cbind(a,b[, 3])

这不是合并的任务。 “月”和“站点”不能唯一地标识数据中的观测值。 换句话说,b中“ slope”列的每个值都与等号的每一行匹配。

只是做绑定:

df <- cbind(a, b[,3])

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM