【发布时间】:2015-04-17 15:38:10
【问题描述】:
好的,所以我是一个相当不错的 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.
data1 看起来更整洁:
user date
1b .
2b .
3b .
4b .
5b .
6b .
. .
. .
. .
etc.
显然,我很清楚合并通常由merge() 或如果安装了软件包 plyr 完成join()。
现在解决实际问题:
当我尝试使用时:
x <- merge(df, data1, by="user", all=FALSE)
结果将是 x 通过 21 个变量获得 0 个观察结果
然后我想,让我们试试join() 函数并使用以下代码:
library(plyr)
x <- join(df, data1, by="user", type="inner")
这导致 x 有 21 个变量的 0 个观察结果
我尝试了无数种不同类型/全部的变体,并省略了 by 部分,但结果都是一样的。
我当时的想法是实际测试 df 的用户是否在 data1 中,所以我尝试了第一个用户用户 1 的子集
x <- subset(df, user == "1b")
结果是x 有 3 个观察值和 20 个变量的子集。 (示例中为 1a)。
我有点不知道下一步该从哪里继续。
我的一个想法是对唯一用户进行子集化,但我不确定如何实现这一目标
a <- unique(data1$user)
b <- subset(df, user %in% c(a))
上面的代码似乎也不起作用,所以如果有人可以帮助我,将不胜感激。
编辑变量名以避免进一步混淆
【问题讨论】:
-
请创建一个最小的可重现示例。您确定其中一个 data.frames 的
user列中没有杂散空格吗? -
确保你在两个数据框中加入的列是相同的类型——要么是具有相同级别的因素,要么更简单地说,是一个字符。我建议只在两列上都做
as.character()。 -
如果这不能解决问题,请发布
dput(head(df))和dput(head(data1))以使其可重现到数据类型。 -
另外,在您的示例中,两个数据集都有一个名为
var2的列。这是准确的吗?如果是这样,你应该重命名其中一个,除非你也想合并它。