【发布时间】:2018-01-25 20:41:17
【问题描述】:
如果我有这样的表:
user,v1,v2,v3
a,1,0,0
a,1,0,1
b,1,0,0
b,2,0,3
c,1,1,1
我怎么把它变成这个?
user,v1,v2,v3
a,2,0,1
b,3,0,3
c,1,1,1
【问题讨论】:
标签: r data-cleaning
如果我有这样的表:
user,v1,v2,v3
a,1,0,0
a,1,0,1
b,1,0,0
b,2,0,3
c,1,1,1
我怎么把它变成这个?
user,v1,v2,v3
a,2,0,1
b,3,0,3
c,1,1,1
【问题讨论】:
标签: r data-cleaning
在基础 R 中,
D <- matrix(c(1, 0, 0,
1, 0, 1,
1, 0, 0,
2, 0, 3,
1, 1, 1),
ncol=3, byrow=TRUE, dimnames=list(1:5, c("v1", "v2", "v3")))
D <- data.frame(user=c("a", "a", "b", "b", "c"), D)
aggregate(. ~ user, D, sum)
返回
> aggregate(. ~ user, D, sum)
user v1 v2 v3
1 a 2 0 1
2 b 3 0 3
3 c 1 1 1
【讨论】:
您可以为此使用dplyr:
library(dplyr)
df = data.frame(
user = c("a", "a", "b", "b", "c"),
v1 = c(1, 1, 1, 2, 1),
v2 = c(0, 0, 0, 0, 1),
v3 = c(0, 1, 0, 3, 1))
group_by(df, user) %>%
summarize(v1_sum = sum(v1),
v2_sum = sum(v2),
v3_sum = sum(v3))
如果您不熟悉 %>% 表示法,它基本上就像来自 bash 的管道。它从group_by() 获取输出并将其放入summarize()。同样的事情会以这种方式完成:
by_user = group_by(df, user)
df_summarized = summarize(by_user,
v1_sum = sum(v1),
v2_sum = sum(v2),
v3_sum = sum(v3))
【讨论】: