期待创建一个功能。
我想在给定组中添加观察次数(例如5次,5次出现2次)。 商家在周内的相同数量的天数将相加。求和值将位于新行“总发生次数”中。
tapply或plyr的工作方式,但我坚持一些细微差别。
谢谢!
14X3 matrix
Business Week Days
A **1** 3
A **1** 3
A **1** 1
A 2 4
A 2 1
A 2 1
A 2 6
A 2 1
B **1** 1
B **1** 2
B **1** 7
B 2 2
B 2 2
B 2 na
**AND BECOME**
10X4 matrix
Business Week Days Total-Occurrences
A **1** 3 2
A **1** 1 1
A 2 1 3
A 2 4 1
A 2 6 1
B **1** 1 1
B **1** 2 1
B **1** 7 1
B 3 2 2
B 2 na 0
答案 0 :(得分:1)
如果我正确理解了您的问题,您希望按Business
和Week
以及Days
对数据框进行分组,并计算新列{{1}中每个组的出现次数}。
Total-Occurences
肯定有不同的方法可以做到这一点。一种方法是使用df <- structure(list(Business = structure(c(1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L), .Label = c("A", "B"), class = "factor"),
Week = structure(c(1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 1L, 1L,
1L, 2L, 2L, 2L), .Label = c("**1**", "2"), class = "factor"),
Days = structure(c(3L, 3L, 1L, 4L, 1L, 1L, 5L, 1L, 1L, 2L,
6L, 2L, 2L, 7L), .Label = c("1", "2", "3", "4", "6", "7",
"na"), class = "factor")), .Names = c("Business", "Week",
"Days"), class = "data.frame", row.names = c(NA, -14L))
:
dplyr
您也可以使用require(dplyr)
result <- df %.%
group_by(Business,Week,Days) %.%
summarize(Total.Occurences = n())
#>result
# Business Week Days Total.Occurences
#1 A **1** 1 1
#2 A **1** 3 2
#3 A 2 1 3
#4 A 2 4 1
#5 A 2 6 1
#6 B **1** 1 1
#7 B **1** 2 1
#8 B **1** 7 1
#9 B 2 2 2
#10 B 2 na 1
:
plyr
请注意,根据这些功能,输出与您在问题中发布的内容略有不同。我认为这可能是一个错字,因为在您的原始数据中没有第3周,但在您想要的输出中有。
在两个解决方案之间,require(plyr)
ddply(df, .(Business, Week, Days), nrow)
方法可能更快。
我想还有其他方法可以做到这一点(但我不确定tapply)