为什么我的数据框合并?

时间:2015-04-17 15:38:10

标签: r dataset

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

我有2个数据集:
数据集 df :13287320观察20个变量
数据集 data1 :通过2个变量进行9453次观测​​

df data1 都有一个公共变量,即用户

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次观察

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

我接下来的想法是实际测试df的用户是否在data1中,所以我尝试了第一个用户的子集,用户1

x <- subset(df, user == "1b")

结果是x有3个观察值和20个变量的子集。 (例子中的1a)。

我有点不知道接下来要去哪里。

我的想法是对唯一身份用户进行分组,但我不确定如何实现此目标

a <- unique(data1$user)
b <- subset(df, user %in% c(a))

上述代码似乎无法正常工作,如果有人可以帮助我,我们将不胜感激。

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

3 个答案:

答案 0 :(得分:1)

只是有这个问题,发现这是因为变量实际上不匹配。更改为字符而不是因素使此操作更加明显。要由第二个数据集中的包含空格合并的变量。 清理这个问题对我来说是个问题。

祝你好运! 玛特

答案 1 :(得分:0)

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

如果您认为应该匹配,那么您需要做一些工作,因为R无法知道 您打算如何匹配。

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

答案 2 :(得分:0)

嘿,我知道我迟到了比赛,但我在RStudio工作,并被类似的问题困扰。

在两个(或两个)数据框中是否有大量列(添加到100以上)?如果是这样,以下可能有用:

似乎无论我做了什么,在使用以下命令合并后,在RStudio中的数据框查看器中查看两个数据帧(df1 4023乘150个vars,df2 4023乘23个vars)时不会合并:

dfall <- merge(df1, df2, by="lookup") 

其中查询在df1df2中都是唯一的。

当我查看RStudio中的数据框查看器(环境窗口中的图表图标)时,看起来好像这个命令失败了。实际上,这个命令工作得非常好,但是RStudio数据框查看器仅限于第一百列,如果你有更多,它不会显示它们。看起来像合并的我失败了。我花了几分钟才意识到合并工作正常,但观众没有显示合并的列。

有三种方法可以确定是否发生了这种情况。

  1. 在RStudio的环境窗口中查看您的数据框是否大于100个变量(列在"value"列中)。如果是,您可能会遇到同样的问题。

  2. 使用R head()命令查看控制台中合并数据集的第一行(不会将列修剪为前100行)

  3. 将合并后的数据框写入CSV并在excel或google工作表中打开(使用以下命令导出):

    write.table(dfall, file="dfall.csv", sep=",", row.names=FALSE)
    
  4. 这会将csv文件写入您的工作目录,可以在excel或google工作表中打开。检查文件以查看合并的列是否存在。

    干杯。