0

関数の作成を検討しています。

特定のグループ内での観測の発生回数を追加したいと思います (例: 5、5 回の発生を 2 回)。ビジネス別の週内の同じ日数が合計されます合計された値は、新しい行 'Total-occurrences.' に表示されます。

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
4

1 に答える 1

1

あなたの質問を正しく理解できれば、データ フレームをBusinessandWeekDaysグループ化し、各グループの出現回数を新しい列で計算する必要があります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))

確かにこれを行うにはさまざまな方法があります。1つの方法は、次を使用すること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

require(plyr)

ddply(df, .(Business, Week, Days), nrow)

これらの関数に基づくと、出力は質問に投稿したものとはわずかに異なることに注意してください。元のデータには週 3 がありませんが、目的の出力にはあるため、これはタイプミスである可能性があります。

2 つのソリューションの間では、dplyrアプローチの方がおそらく高速です。

これを行う他の方法もあると思います(ただし、tapplyについてはわかりません)

于 2014-05-08T18:34:52.360 に答える