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

时间:2013-12-10 04:25:12

标签: 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

我有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

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

1 个答案:

答案 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)]