为什么我的数据框不会合并?

Che*_*ara 5 r dataset

好吧,我是一个相当不错的 R 程序员,每周工作 3/5 天,上周我遇到了一个相当独特的问题。我在 R-studio 工作,无法合并前面描述的数据集

我有 2 个数据集:
数据集df:20 个变量的 13287320 个观测值
数据集data1:2 个变量的 9453 个观测值

df和data1都有一个共同的变量user

df有多个用户副本,所以它看起来有点像:

user  var2  var3  var4  ........  var20
1a     x     x     x                x
1a     x     x     x                x
1a     x     x     x                x
2a     x     x     x                x
2a     x     x     x                x
3a     x     x     x                x
4a     x     x     x                x
5a     x     x     x                x
6a     x     x     x                x
6a     x     x     x                x
6a     x     x     x                x
.      .     .     .                .
.      .     .     .                .
.      .     .     .                .
etc.
Run Code Online (Sandbox Code Playgroud)

data1看起来更整洁:

user  date
1b     .
2b     .
3b     .
4b     .
5b     .
6b     .
.      .
.      .
.      .
etc.
Run Code Online (Sandbox Code Playgroud)

显然,我很清楚,合并通常是通过merge()安装 plyr 包来完成的join()

现在来说说实际问题:

当我尝试使用时:

x <- merge(df, data1, by="user", all=FALSE)
Run Code Online (Sandbox Code Playgroud)

结果将是x21 个变量有 0 个观测值

所以我想,让我们尝试一下这个join()功能并使用以下代码:

library(plyr)
x <- join(df, data1, by="user", type="inner")
Run Code Online (Sandbox Code Playgroud)

这导致x21 个变量的观测值为 0

我尝试了无数不同类型/全部的变体,并省略了部分,但所有结果都是相同的。

我当时的想法是实际测试 df 的用户是否在 data1 中,因此我尝试了第一个用户(用户 1)的子集

x <- subset(df, user == "1b")
Run Code Online (Sandbox Code Playgroud)

结果是一个包含x3 个观测值和 20 个变量的子集。(示例中的 1a)。

我有点不知道下一步该去哪里。

我的一个想法是对唯一用户进行子集化,但是我不确定如何实现这一点

a <- unique(data1$user)
b <- subset(df, user %in% c(a))
Run Code Online (Sandbox Code Playgroud)

上面的代码似乎也不起作用,所以如果有人可以帮助我,我将不胜感激。

编辑变量名称以避免进一步混淆

Das*_*son 0

all=FALSE您在合并调用中指定。这意味着,如果 df 中有一个元素不在 data1 中,则不会包含该元素,如果 data1 中有一个元素不在 df 中,则也不会包含该元素。查看您的示例数据,用户列没有任何匹配的内容。这就是为什么它是空的。

如果你认为应该有匹配,你需要做一些工作,因为 R 不知道你打算如何匹配它们。

请注意,默认情况下,它将使用共享公共名称的所有列来进行匹配,并且为了“匹配”某些内容,匹配列中的所有元素都必须相同。因此,如果 df 和 data1 之间共享多个列名,则可能会遇到此问题。如果您只想匹配单个列,您可以使用by(或by.xby.y) 参数指定要匹配的列。