如何让groupBy找到R中的第一个动作

时间:2016-08-30 10:27:21

标签: r sparkr

在R中我有一个data.frame data,其中head(data)给出了

user  action      information 
12    2012-01-01  12323
11    2014-03-02  24445
12    2012-02-05  32234
....

我想创建一个仅包含user及其出生的新数据集,即第一个操作。对于user 12,例如2012-01-01

在sparkR中我知道如何做到这一点,但我想知道如何在R中做到这一点 在sparkR中,我只是做了这个

new=groupBy(data, data$user)
new_data=agg(new, birth=first(data$action))
# Making it local (from a DataFrame to a data.frame)
local_new_data=collect(new_data)

现在,此列表可以保存为csv文件write.csv("...")

感谢。

更新

我在sparkR中有一个数据集,我在其中运行了sparkR代码以获取用户及其出生的列表。我的问题是我有一台新电脑并没有安装sparkR(我还在努力)。我只需要一个在sparkR中运行我的代码,这样我就可以获得列表。我已准备好执行数据集代码。我真的希望有人可以帮助我吗?

我的回答

我尝试以不同的方式解决它,出于某种原因它运行得非常快。我只是这样做,因为列操作已经排序

s=data[!duplicated(data),]

现在s包含行动是他们出生的用户。为了得到它们我只是这样做

ss=cbind(as.character(s$user), as.character(s$action))
由于某些原因,

在R中运行速度非常快。

我的问题是重复 - 它与其他一些声称的问题有很大不同。

1 个答案:

答案 0 :(得分:1)

R中,使用dplyr,语法几乎相似,因为它还具有first功能以及group_by(代替groupby

library(dplyr)
data %>%
     group_by(user) %>%
     summarise(birth = first(action))

或另一个选项是data.table

library(data.table)
setDT(data)[, .(birth = action[1L]) , by = user]