好吧,所以我是一个相当不错的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))
上述代码似乎无法正常工作,如果有人可以帮助我,我们将不胜感激。
编辑变量名称以避免进一步混淆
答案 0 :(得分:1)
只是有这个问题,发现这是因为变量实际上不匹配。更改为字符而不是因素使此操作更加明显。要由第二个数据集中的包含空格合并的变量。 清理这个问题对我来说是个问题。
祝你好运! 玛特
答案 1 :(得分:0)
您在合并的调用中指定了all=FALSE
。这意味着,如果df中有一个元素不在data1中,那么它就不会被包含在内,如果data1中有一个元素,那么在df中它就不会被包含在内。包括。查看您的示例数据,用户列没有匹配的内容。这就是为什么它空洞的原因。
如果您认为应该匹配,那么您需要做一些工作,因为R无法知道 您打算如何匹配。
请注意,默认情况下,它会使用共享公用名的所有列进行匹配,并使用“#34;匹配&#34;匹配列中的所有元素都必须相同。因此,如果您在df和data1之间共享多个列名,则可能会遇到此问题。如果您只想匹配单个列,则可以使用by
(或by.x
和by.y
)参数指定要匹配的列。
答案 2 :(得分:0)
嘿,我知道我迟到了比赛,但我在RStudio工作,并被类似的问题困扰。
在两个(或两个)数据框中是否有大量列(添加到100以上)?如果是这样,以下可能有用:
似乎无论我做了什么,在使用以下命令合并后,在RStudio中的数据框查看器中查看两个数据帧(df1 4023乘150个vars,df2 4023乘23个vars)时不会合并:
dfall <- merge(df1, df2, by="lookup")
其中查询在df1
和df2
中都是唯一的。
当我查看RStudio中的数据框查看器(环境窗口中的图表图标)时,看起来好像这个命令失败了。实际上,这个命令工作得非常好,但是RStudio数据框查看器仅限于第一百列,如果你有更多,它不会显示它们。看起来像合并的我失败了。我花了几分钟才意识到合并工作正常,但观众没有显示合并的列。
有三种方法可以确定是否发生了这种情况。
在RStudio的环境窗口中查看您的数据框是否大于100个变量(列在"value"
列中)。如果是,您可能会遇到同样的问题。
使用R head()
命令查看控制台中合并数据集的第一行(不会将列修剪为前100行)
将合并后的数据框写入CSV并在excel或google工作表中打开(使用以下命令导出):
write.table(dfall, file="dfall.csv", sep=",", row.names=FALSE)
这会将csv文件写入您的工作目录,可以在excel或google工作表中打开。检查文件以查看合并的列是否存在。
干杯。