Ricerca…


Osservazioni

Un promemoria: DT[where, select|update|do, by] è usato per lavorare con le colonne di un data.table.

  • La parte "dove" è l'argomento i
  • La parte "select | update | do" è l'argomento j

Questi due argomenti vengono generalmente passati per posizione anziché per nome.

Selezione di righe all'interno di ciascun gruppo

# example data
DT <- data.table(Titanic)

Supponiamo che, per ciascun sesso, desideriamo le righe con i numeri di sopravvivenza più alti:

DT[Survived == "Yes", .SD[ N == max(N) ], by=Sex]

#    Class    Sex   Age Survived   N
# 1:  Crew   Male Adult      Yes 192
# 2:   1st Female Adult      Yes 140

.SD è il sottoinsieme di dati associati a ciascun Sex ; e lo stiamo sottolineando ulteriormente, alle file che soddisfano la nostra condizione. Se la velocità è importante, usa invece un approccio suggerito da eddi su SO :

DT[ DT[Survived == "Yes", .I[ N == max(N) ], by=Sex]$V1 ]

#    Class    Sex   Age Survived   N
# 1:  Crew   Male Adult      Yes 192
# 2:   1st Female Adult      Yes 140

insidie

Nell'ultima riga di codice, .I riferisce ai numeri di riga dell'intero data.table. Tuttavia, questo non è vero quando non c'è nessuno by :

DT[ Survived == "Yes", .I]

# 1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16

DT[ Survived == "Yes", .I, by=Sex]$I

# 17 18 19 20 25 26 27 28 21 22 23 24 29 30 31 32

Selezione di gruppi

# example data
DT = data.table(Titanic)

Supponiamo di voler vedere solo la seconda classe:

DT[ Class == "2nd" ]

#    Class    Sex   Age Survived   N
# 1:   2nd   Male Child       No   0
# 2:   2nd Female Child       No   0
# 3:   2nd   Male Adult       No 154
# 4:   2nd Female Adult       No  13
# 5:   2nd   Male Child      Yes  11
# 6:   2nd Female Child      Yes  13
# 7:   2nd   Male Adult      Yes  14
# 8:   2nd Female Adult      Yes  80

Qui, semplicemente sommiamo i dati usando i , la clausola "where".

Selezione di gruppi in base alla condizione

# example data
DT = data.table(Titanic)

Supponiamo di voler vedere ogni classe solo se sopravvive una maggioranza:

DT[, if (sum(N[Survived=="Yes"]) > sum(N[Survived=="No"]) ) .SD, by=Class]

#    Class    Sex   Age Survived   N
# 1:   1st   Male Child       No   0
# 2:   1st Female Child       No   0
# 3:   1st   Male Adult       No 118
# 4:   1st Female Adult       No   4
# 5:   1st   Male Child      Yes   5
# 6:   1st Female Child      Yes   1
# 7:   1st   Male Adult      Yes  57
# 8:   1st Female Adult      Yes 140

Qui, restituiamo il sottoinsieme di dati .SD solo se la nostra condizione è soddisfatta. Un'alternativa è

DT[, .SD[ sum(N[Survived=="Yes"]) > sum(N[Survived=="No"]) ) ], by=Class]

ma questo a volte si è dimostrato più lento.



Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow