Sto cercando di aggiungere una riga di NA dopo ciascun gruppo di dati in R
.Inserire una riga di NA dopo ogni gruppo di dati utilizzando data.table
Una domanda simile è stata posta in precedenza. Insert a blank row after each group of data.
La risposta accettata funziona bene anche in questo caso come segue.
group <- c("a","b","b","c","c","c","d","d","d","d")
xvalue <- c(16:25)
yvalue <- c(1:10)
df <- data.frame(cbind(group,xvalue,yvalue))
df_new <- as.data.frame(lapply(df, as.character), stringsAsFactors = FALSE)
head(do.call(rbind, by(df_new, df$group, rbind, NA)), -1)
group xvalue yvalue
a.1 a 16 1
a.2 <NA> <NA> <NA>
b.2 b 17 2
b.3 b 18 3
b.31 <NA> <NA> <NA>
c.4 c 19 4
c.5 c 20 5
c.6 c 21 6
c.41 <NA> <NA> <NA>
d.7 d 22 7
d.8 d 23 8
d.9 d 24 9
d.10 d 25 10
Come posso accelerare l'operazione utilizzando data.table
per una grande data.frame?
Questo è soluzione molto molto pulito, anche se penso che si potrebbe evitare guai con 'group' e solo creare qualche indice e lasciarlo lì (o sbarazzarsi di esso in seguito), forse qualcosa di simile a' setDT (df) [, indx: = .GRP, gruppo] [, .SD [1 :(. N + 1)], indx] ' –
@DavidArenburg Grazie per il commento. Anche il tuo codice funziona. Grazie – akrun
O semplicemente 'setDT (df) [, indx: = gruppo] [, .SD [1 :(. N + 1)], indx] [, indx: = NULL] []' –