gpt4 book ai didi

r - R 中的合并导致比数据帧之一多的行

转载 作者:行者123 更新时间:2023-12-03 23:19:21 25 4
gpt4 key购买 nike

我有两个数据框,第一个包含 9994 行,第二个包含 60431 行。我想合并两个数据框,这样合并后的数据框包含两个数据框的组合列,但只包含 9994 行。

但是,合并时我得到了超过 9994 行。我怎样才能确保这不会发生?

df1 = readRDS('data1.RDS')
nrow(df1)
# [1] 9994

df2 = readRDS('data2.RDS')
nrow(df2)
# [1] 60431

df = merge(df1,df2,by=c("col1","col2"))
nrow(df)
# [1] 10057

df = merge(df1,df2,by=c("col1","col2"),all.x=TRUE)
nrow(df)
# [1] 10057
nrow(na.omit(df))
# [1] 10057

编辑:按照 akrun 的评论。
是的,第二个数据框中有重复
nrow(unique(df2[,c("col1","col2")]))
# [1] 60263
nrow(df2)
# [1] 60431

如果同一个 {col1,col2} 组合有多个,我如何只从数据框中取一行。当我合并时,我只想有 9994 行。

最佳答案

这应该有效,一定要排序 df2首先,您选择正确的行。

df = merge(
df1,
df2[!duplicated(df2[, c("col1","col2")], ],
by=c("col1","col2"),
all.x=TRUE
)

这里发生了什么:我通过我们想要合并的列来合并两个数据框,但我首先只选择 col1 的任意组合的第一次出现和 col2来自第二个 data.frame df2 .
duplicated如果使用 data.frame 调用,检查行是否重复.我选择 col1col2来自 df2 , 所以 duplicated返回 TRUE对于具有相同 col1 的行和 col2但其他 cols 的差异。然后我只选择不重复的行。

(仔细阅读 [ -表达式,从里到外检查函数调用,得到中间结果)

编辑:添加了评论中建议的解释

关于r - R 中的合并导致比数据帧之一多的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30410681/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com