如何根据现有因素在新列中添加因子

Fid*_*yle 4 r r-factor

数据如下所示:

   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
Run Code Online (Sandbox Code Playgroud)

我有5行statenum=48casenum=3080,和9行statenum=47casenum=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
Run Code Online (Sandbox Code Playgroud)

显示行数共享statenum和casenum的相同值.

the*_*ail 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
Run Code Online (Sandbox Code Playgroud)

您可能还对"data.table"包感兴趣:

library(data.table)
DT <- data.table(df)
DT[, new_col := .N, by = list(statenum, casenum)]
Run Code Online (Sandbox Code Playgroud)