0

~ 1 ミリ行と 8 列 (変数) の大規模なデータセットがあります。これらの変数の 1 つである ORDER には、1 から 90 までのカテゴリがあります。変数 ORDER (4) 1、2、3+、および ALL のカテゴリ数を減らした新しい data.frame を作成したいと考えています。ここで、ALL は合計です。すべてのカテゴリ (1 ~ 90) の FREQUENCY と 3+ は、カテゴリ >=3 (つまり 3 ~ 90) の FREQUENCY の合計です。

YEAR  PROVINCE  ZONA91OK AGE5 ORDER NATIONALITY_MOTHER NATIONALITY_FATHER FREQUENCY
 1979        1      101   15     1      No computable      No computable        10
 1989        3      102   20     1      No computable      No computable        50

私はRを使用したデータ管理に非常に慣れていないため、この問題に関するヘルプは大歓迎です!

これはdata.frameのサンプルです

mydata<-structure(list(YEAR = c(1981, 1981, 1981, 1981, 1981, 1981, 1981, 
1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 
1981, 1981, 1981), PROVINCE = c(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1), ZONA91OK = c(101, 101, 101, 
101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 
101, 101, 101, 101, 101), AGE5 = c(15, 20, 20, 25, 25, 25, 25, 
30, 30, 30, 30, 30, 35, 35, 35, 35, 35, 35, 40, 40, 40), ORDER = c(1, 
1, 2, 1, 2, 3, 4, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 12, 1, 3, 5), 
NATIONALITY_MOTHER = structure(c(9L, 9L, 9L, 9L, 9L, 9L, 
9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L
), .Label = c("España", "UE-15 y PD", "Resto Europa", "Magreb", 
"África Sub-sahariana", "Latinoamérica", "Asia", "Resto del Mundo", 
"No computable"), class = "factor"), NATIONALITY_FATHER = structure(c(9L, 
9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 
9L, 9L, 9L, 9L, 9L), .Label = c("España", "UE-15 y PD", "Resto Europa", 
"Magreb", "África Sub-sahariana", "Latinoamérica", "Asia", 
"Resto del Mundo", "No computable"), class = "factor"), FREQUENCY = c(10, 
40, 20, 50, 30, 10, 1, 10, 15, 10, 1, 1, 5, 5, 5, 1, 1, 1, 
1, 1, 1)), .Names = c("YEAR", "PROVINCE", "ZONA91OK", "AGE5", 
"ORDER", "NATIONALITY_MOTHER", "NATIONALITY_FATHER", "FREQUENCY"
 ), row.names = 60175:60195, class = "data.frame")
4

1 に答える 1

0

データに 100 万行ある場合は、data.table

library(data.table)
myDT <- data.table(mydata, key="ORDER")

specialCats <- c(1, 2, 3)

rbind(
    myDT[, list(SUM_FOR="ALL", FREQ_SUM=sum(FREQUENCY))]
  , myDT[!.(specialCats), list(SUM_FOR="3+", FREQ_SUM=sum(FREQUENCY))]
)

## RESULTS: 
       SUM_FOR FREQ_SUM
1:     ALL      219
2:      3+        7

再更新: コメント

ORDER要件に合わせて列を変更するには、次を使用します。

myDT[, order := ifelse(ORDER %in% specialCats, as.character(ORDER), "3+")]

注 1:3+値にするためには、文字列に変換する必要があります。
注 2: 行を追加してもあまり意味があり"ALL"ません。AGEPROVINCE

于 2013-10-09T15:05:51.107 に答える