1

我有一个看起来像这样的数据集

XDATA 
SAMPN   HHSIZE    TOTVEH
1          2        3
2          6        4
2          6        4
5          1        3
5          1        3
5          1        3

我怎样才能添加一个额外的列让我们说SAMPN频率,所以我可以看起来像这样:

XDATA 
SAMPN   HHSIZE    TOTVEH   FREQ
1          2        3        1
2          6        4        2
2          6        4        2
5          1        3        3
5          1        3        3
5          1        3        3

提前致谢

4

3 回答 3

3
library(data.table)
XDATA <- data.table(XDATA)

XDATA[, FREQ := .N, by=SAMPN]
XDATA
   SAMPN HHSIZE TOTVEH FREQ
1:     1      2      3    1
2:     2      6      4    2
3:     2      6      4    2
4:     5      1      3    3
5:     5      1      3    3
6:     5      1      3    3
> 

For BASE R - see @Ananda Mahto's solution

于 2013-09-26T16:52:17.733 回答
1

@Ricardo 对基本 R 的回答(使用tapplyand merge)的替代方法是使用ave

within(XDATA, {
  FREQ <- ave(SAMPN, SAMPN, FUN = length)
})
#   SAMPN HHSIZE TOTVEH FREQ
# 1     1      2      3    1
# 2     2      6      4    2
# 3     2      6      4    2
# 4     5      1      5    3
# 5     5      1      5    3
# 6     5      1      5    3
于 2013-09-26T17:02:24.987 回答
0
XDATA <- data.table(
SAMPN = c(1,2,2,5,5,5),
HHSIZE = c(2,6,6,1,1,1),
TOTVEH = c(3,4,4,5,5,5)
)

XDATA[, COUNT := 1]
XDATA[, FREQ := sum(COUNT), by = c('SAMPN','HHSIZE','TOTVEH')]

#SAMPN HHSIZE TOTVEH COUNT FREQ
#1:     1      2      3     1    1
#2:     2      6      4     1    2
#3:     2      6      4     1    2
#4:     5      1      5     1    3
#5:     5      1      5     1    3
#6:     5      1      5     1    3
于 2013-09-26T16:51:50.763 回答