我有一个这样的数据框:
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等编程语言中缺乏基础数据结构,这使我的工作变得不方便。
答案 0 :(得分:2)
假设您的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()
。
答案 1 :(得分:1)
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