数据如下所示:
statenum casenum vnumber pnumber numfatal
1 48 3081 1 1 1
2 48 3080 5 1 1
3 48 3080 4 1 1
4 48 3080 1 1 1
5 48 3080 2 1 1
6 48 3080 3 1 1
7 48 3079 1 1 1
8 47 3080 1 1 1
9 47 3080 3 4 1
10 47 3080 2 3 1
11 47 3080 3 2 1
12 47 3080 2 2 1
13 47 3080 3 3 1
14 47 3080 2 1 1
15 47 3080 4 1 1
16 47 3080 3 1 1
17 47 3077 2 1 1
我有5行statenum=48
和casenum=3080
,9行有statenum=47
和casenum=3080
。
如何在每个列中分别添加一列值为5和9的因子?
我希望像这样添加一行:
statenum casenum vnumber pnumber numfatal new row
1 48 3081 1 1 1 1
2 48 3080 5 1 1 5
3 48 3080 4 1 1 5
4 48 3080 1 1 1 5
5 48 3080 2 1 1 5
6 48 3080 3 1 1 5
7 48 3079 1 1 1 1
8 47 3080 1 1 1 9
9 47 3080 3 4 1 9
10 47 3080 2 3 1 9
11 47 3080 3 2 1 9
12 47 3080 2 2 1 9
13 47 3080 3 3 1 9
14 47 3080 2 1 1 9
15 47 3080 4 1 1 9
16 47 3080 3 1 1 9
17 47 3077 2 1 1 1
显示行数共享statenum和casenum的相同值。
答案 0 :(得分:5)
我想是这样的事情:
df$new <- with(df,ave(sequence(nrow(df)),list(statenum,casenum),FUN=length))
> df
statenum casenum vnumber pnumber numfatal new
1 48 3081 1 1 1 1
2 48 3080 5 1 1 5
3 48 3080 4 1 1 5
4 48 3080 1 1 1 5
5 48 3080 2 1 1 5
6 48 3080 3 1 1 5
7 48 3079 1 1 1 1
8 47 3080 1 1 1 9
9 47 3080 3 4 1 9
10 47 3080 2 3 1 9
11 47 3080 3 2 1 9
12 47 3080 2 2 1 9
13 47 3080 3 3 1 9
14 47 3080 2 1 1 9
15 47 3080 4 1 1 9
16 47 3080 3 1 1 9
17 47 3077 2 1 1 1
您可能也对“data.table”包感兴趣:
library(data.table)
DT <- data.table(df)
DT[, new_col := .N, by = list(statenum, casenum)]