我有这样一个数据帧:如何在R中聚合数据框?
user event score
1 2 0.5
1 3 0.2
2 3 0.7
3 1 0.9
3 4 0.1
,我想要得到的结果是:
user event
1 2,3
2 3
3 1,4
我怎样才能做到这一点R中?
有时,我认为R在编程语言(如Java或Python)中缺乏基础数据结构会使我的工作变得不方便。
我有这样一个数据帧:如何在R中聚合数据框?
user event score
1 2 0.5
1 3 0.2
2 3 0.7
3 1 0.9
3 4 0.1
,我想要得到的结果是:
user event
1 2,3
2 3
3 1,4
我怎样才能做到这一点R中?
有时,我认为R在编程语言(如Java或Python)中缺乏基础数据结构会使我的工作变得不方便。
假设您的data.frame
被称为mydata
,做到:
aggregate(event ~ user, mydata, I)
得到保留的数字表示或
aggregate(event ~ user, mydata, paste, collapse = ", ")
这贴的值来创建一个特征向量的列表。
这里是如何将这些存储不同的演示:
x1 <- aggregate(event ~ user, mydata, paste, collapse =",")
x2 <- aggregate(event ~ user, mydata, I)
x1$event
# [1] "2,3" "3" "1,4"
x2$event
# $`0`
# [1] 2 3
#
# $`1`
# [1] 3
#
# $`2`
# [1] 1 4
#
我个人比较喜欢使用I
到paste
,这样我就可以在列中使用lapply()
如果我以后需要。
如何将参数sep =“”传递给粘贴功能? –
@jerry_sjtu,你为什么想要/需要?在这里,我使用了'collapse'参数,因为你只是试图从单个向量中“折叠”所有元素。当您将多个向量粘贴在一起时,“sep”参数更适合您。作为一个例子,试试这个:'x < - 1:3; y <-4:6; paste(x,sep =“,”);粘贴(x,collapse =“,”);粘贴(x,y,sep =“,”);粘贴(x,y,collapse =“,”)'。既然你提到'sep =“”',只需用'sep =“”'替换'collapse =“,''或者直接将'paste'替换为无参数。仅供参考:这会将事件列中的数字强制转换为字符。 – A5C1D2H2I1M1N2O1R2T1
data.frame(user=unique(dat$user), event=tapply(dat$event, dat$user, c) )
#
user event
1 1 2, 3
2 2 3
3 3 1, 4
这条语句的工作原因是因为事件列是按因数dat $ user排序的,并且没有映射关系?这是有趣的,因为我总是试图映射。 –
我不清楚你的意思是“没有映射关系”。确实,它的工作原理是行可以交叉分类,而'unique'函数将保留'tapply'使用的顺序。 –
您试图在这里模拟哪种Python数据结构?以用户ID作为键和事件分数列表作为值的字典? – Marius
是的,我只是想建立一个地图作为你的描述。 @Marius –
有时我觉得人们对R数据结构的理解不够,使得我们在教育上的努力不方便。 –