Come si aggiunge una colonna nel mezzo di un frame di dati R? Voglio vedere se ho una colonna chiamata "LastName" e poi aggiungerla come terza colonna se non esiste già.La colonna esiste e come ridisporre le colonne nel frame di dati R
risposta
1) Test per esistenza: utilizzare% in% sui nomi dei nomi, ad es.
> example(data.frame) # to get 'd'
> "fac" %in% colnames(d)
[1] TRUE
> "bar" %in% colnames(d)
[1] FALSE
2) Bisogna in sostanza, di creare un nuovo data.frame della prima metà del vecchio, la nuova colonna, e la seconda metà:
> bar <- data.frame(d[1:3,1:2], LastName=c("Flim", "Flom", "Flam"), fac=d[1:3,3])
> bar
x y LastName fac
1 1 1 Flim C
2 1 2 Flom A
3 1 3 Flam A
>
o utilizzando cbind:
> example(data.frame) # to get 'd'
> bar <- cbind(d[1:3,1:2],LastName=c("Flim", "Flom", "Flam"),fac=d[1:3,3])
> bar
x y LastName fac
1 1 1 Flim A
2 1 2 Flom B
3 1 3 Flam B
Un approccio è quello di aggiungere la colonna alla fine del frame di dati e quindi utilizzare il sottotitolo per spostarlo nella posizione desiderata:
d$LastName <- c("Flim", "Flom", "Flam")
bar <- d[c("x", "y", "Lastname", "fac")]
Bella! Non avevo visto quel trucco. E puoi riassegnarlo direttamente anche a d. –
Vorrei poter combinare questa risposta con Dirk in alto o selezionarli entrambi come risposta selezionata. Questo è così ovvio che mi prendo a calci per non pensarci! –
Grazie è molto utile –
Delle tante stupide funzioni di helper che ho scritto, questo viene usato ogni volta che carico R. Fa solo un elenco dei nomi delle colonne e degli indici, ma io lo uso costantemente.
##creates an object from a data.frame listing the column names and location
namesind=function(df){
temp1=names(df)
temp2=seq(1,length(temp1))
temp3=data.frame(temp1,temp2)
names(temp3)=c("VAR","COL")
return(temp3)
rm(temp1,temp2,temp3)
}
ni <- namesind
Utilizzare ni per visualizzare i numeri di colonna. (ni è solo un alias per namesind, non uso mai namesind ma pensavo fosse in origine un nome migliore) Quindi se vuoi inserire la colonna in dire, posizione 12, e data.frame è chiamata bob con 20 colonne, sarebbe .
bob2 < - data.frame (bob [, 1: 11], newColumn, bob [12: 20]
anche se mi piaceva l'add alla fine e riorganizzare risposta da Hadley pure
Ho sempre pensato qualcosa come append() [anche se sfortunato il nome è] dovrebbe essere una funzione generica
## redefine append() as generic function
append.default <- append
append <- `body<-`(args(append),value=quote(UseMethod("append")))
append.data.frame <- function(x,values,after=length(x))
`row.names<-`(data.frame(append.default(x,values,after)),
row.names(x))
## apply the function
d <- (if(!"LastName" %in% names(d))
append(d,values=list(LastName=c("Flim","Flom","Flam")),after=2) else d)
La risposta di Dirk Eddelbuettel funziona, ma non è necessario indicare numeri di riga o specificare voci nella colonna dell'ultimo nome. Questo codice dovrebbe farlo per un frame di dati di nome df
:
if(!("LastName" %in% names(df))){
df <- cbind(df[1:2],LastName=NA,df[3:length(df)])
}
(il valore predefinito LastName
-NA
, ma si potrebbe facilmente utilizzare "LastName='Smith'
")
- 1. R Numeri come nomi di colonne di frame di dati
- 2. Identificazione di colonne duplicate in un frame di dati R
- 3. come tracciare tutte le colonne di un frame di dati in R
- 4. Aggiungi colonne a un frame di dati vuoto in R
- 5. Combina due frame di dati e rimuove le colonne duplicate
- 6. R dati - Modifica il mio frame di dati (convertendo le colonne in righe e viceversa)
- 7. R: Assegna etichette variabili delle colonne del frame di dati
- 8. Seleziona dinamicamente le colonne del frame di dati utilizzando $ e un vettore di nomi di colonne
- 9. Variabile come nome di colonna nel frame di dati
- 10. Come spostare le colonne di un frame di dati in righe dopo le prime colonne?
- 11. corrispondenza più colonne su diversi frame di dati e ottenere altri colonna come risultato
- 12. conversione dell'output del comando "by" di R nel frame dati
- 13. R: riorganizzare le righe specifiche del frame di dati a colonna singola nella nuova colonna
- 14. Normalizza colonne del frame di dati panda
- 15. Cambiare dimnames di matrici e frame di dati in R
- 16. Creazione di variabili nel frame di dati R in base a un altro frame di dati
- 17. Mantieni nome colonna quando si seleziona una colonna da un frame dati/matrice in R
- 18. R: Formato riepilogo frame dati
- 19. annodare attraverso la lista dei frame di dati a R
- 20. passando una stringa come nome colonna del frame di dati
- 21. Sostituire i valori nel frame di dati in base ad altro frame di dati in R
- 22. R: Trova le colonne mancanti, aggiungi al frame dati se manca
- 23. R: convertire i dati XML nel frame dati
- 24. rimozione fila condizionale in un frame di dati R
- 25. unire due o più frame di dati nel sistema R
- 26. Come ottengo le classi di tutte le colonne in un frame di dati?
- 27. Come aggiungere dati per colonne nel file csv usando R?
- 28. Estrarre gli elementi di data da POSIXlt e inserirli nel frame di dati in R
- 29. Selezionare la colonna 2 dell'ultima colonna in R
- 30. R: Trova e aggiungi righe mancanti (/ non esistenti) nel frame dati relativi al tempo
Mi consiglia di non usare cbind come la semantica sono piuttosto complicati: a seconda dell'input potresti ottenere una matrice o una data.frame – hadley