免责声明 - 标题可能会产生误导 - 我认为我没有找到解决方案的部分原因是我不知道该如何去谷歌。
我有一个扩展格式的组级数据集;年份和国家代码重复每个组(id),如下面(手动输入)
melt(df[, -5, with = FALSE][, rn := 1:.N], id.var= 'rn')[,
variable[order(-value[!duplicated(value, fromLast=TRUE)])][2] , rn]$V1
#[1] B C A A
我想在末尾添加国家/地区年份计数作为列,因此它看起来像下面的
year country id v1 v2 v3
1991 20 1 1 0 0
1991 20 2 0 1 0
1991 20 3 0 0 1
1991 20 4 1 0 0
1991 20 5 1 0 0
1991 20 6 0 1 0
我已尝试year country id v1 v2 v3 v1.count v2.count v3.count
1991 20 1 1 0 0 3 2 1
1991 20 2 0 1 0 3 2 1
1991 20 3 0 0 1 3 2 1
1991 20 4 1 0 0 3 2 1
1991 20 5 1 0 0 3 2 1
1991 20 6 0 1 0 3 2 1
,aggregate
和count
但没有成功。我认为Group by and conditionally count或Frequency count for a specific category可能会成功,但我无法让它发挥作用。我怎么能做到这一点?
答案 0 :(得分:1)
在按“年份”和“国家/地区”分组后,我们可以使用mutate_each
中的dplyr
df1 %>%
group_by(year, country) %>%
mutate_each(funs(count = sum), v1:v3)
# year country id v1 v2 v3 v1_count v2_count v3_count
# <int> <int> <int> <int> <int> <int> <int> <int> <int>
#1 1991 20 1 1 0 0 3 2 1
#2 1991 20 2 0 1 0 3 2 1
#3 1991 20 3 0 0 1 3 2 1
#4 1991 20 4 1 0 0 3 2 1
#5 1991 20 5 1 0 0 3 2 1
#6 1991 20 6 0 1 0 3 2 1
答案 1 :(得分:0)
我猜您也可以只使用mutate
。
df1 <- read.table(text="year country id v1 v2 v3
1991 20 1 1 0 0
1991 20 2 0 1 0
1991 20 3 0 0 1
1991 20 4 1 0 0
1991 20 5 1 0 0
1991 20 6 0 1 0", head=T, as.is=T)
df1
library(dplyr)
df1 %>% group_by(year, country) %>%
mutate(v1.count=sum(v1), v2.count=sum(v2), v3.count=sum(v3))
# Source: local data frame [6 x 9]
# Groups: year, country [1]
# year country id v1 v2 v3 v1.count v2.count v3.count
# (int) (int) (int) (int) (int) (int) (int) (int) (int)
# 1 1991 20 1 1 0 0 3 2 1
# 2 1991 20 2 0 1 0 3 2 1
# 3 1991 20 3 0 0 1 3 2 1
# 4 1991 20 4 1 0 0 3 2 1
# 5 1991 20 5 1 0 0 3 2 1
# 6 1991 20 6 0 1 0 3 2 1