在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中运行速度非常快。
我的问题是不重复 - 它与其他一些声称的问题有很大不同。
答案 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]