Per alcuni motivi (non importa), i nomi dei file nel dataframe importato excel hanno duplicati come indicato di seguito (DT è la tabella di dati convertita da DF dataframe). Tuttavia, si tratta di nomi univoci e quindi la necessità di utilizzare setnames
.nomi per nomi duplicati in data.table
DF<-structure(list(X1 = c("", "15 May 2014", "16 May 2014", "18 May 2014",
"19 May 2014"), X2 = c(NaN, 746.18, 746.18, 744.34, 739.95),
X3 = c(NaN, 549.9, 549.9, 546.5, 549.65), X1 = c(NaN, 406.57,
406.57, 406.66, 404.73), X1 = c(NaN, 1788.86, 1788.86, 1767.69,
1772.34), X1 = c(NaN, 2286, 2286, 2302.37, 2313.14), X2 = c(NaN,
3639.25, 3639.25, 3622.08, 3569.53), X3 = c(NaN, 1160.13,
1160.13, 1144.77, 1129.72), X1 = c(NaN, 182.83, 182.83, 182.83,
182.83), X2 = c(NaN, 787.13, 787.13, 775.39, 764.82), X1 = c(NaN,
853.2, 853.2, 849.67, 844.49)), .Names = c("X1", "X2", "X3",
"X1", "X1", "X1", "X2", "X3", "X1", "X2", "X1"), class = c("data.table",
"data.frame"), row.names = c(NA, -5L))
DT<-as.data.table(DF)
>DT
X1 X2 X3 X1 X1 X1 X2 X3 X1 X2 X1
1: NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2: 15 May 2014 746.18 549.90 406.57 1788.86 2286.00 3639.25 1160.13 182.83 787.13 853.20
3: 16 May 2014 746.18 549.90 406.57 1788.86 2286.00 3639.25 1160.13 182.83 787.13 853.20
4: 18 May 2014 744.34 546.50 406.66 1767.69 2302.37 3622.08 1144.77 182.83 775.39 849.67
5: 19 May 2014 739.95 549.65 404.73 1772.34 2313.14 3569.53 1129.72 182.83 764.82 844.49
Così, ho deciso di cambiare queste colnames utilizzando setnames
, ma ottengo il seguente errore (che è ovvio):
new_names<-c("Date","BOD","DO","FI","HT","HY","IN","MA","SE","OR","RA")
old_names<-names(DT)
setnames(DT, old_names, new_names)
Error in setnames(DT, old_names, new_names) :
Some duplicates exist in 'old': X1,X1,X1,X2,X3,X1,X2,X1
Così, ho fatto ricorso a data.frame modo di cambiare colnames
names(DT)<-new_names # this doesn't give any error but still gives warnings
Warning message:
In `names<-.data.table`(`*tmp*`, value = c("Date", "BOD", "DO", :
The names(x)<-value syntax copies the whole table. This is due to <- in R itself. Please change to setnames(x,old,new) which does not copy and is faster. See help('setnames'). You can safely ignore this warning if it is inconvenient to change right now. Setting options(warn=2) turns this warning into an error, so you can then use traceback() to find and change your names<- calls.
> DT
Date BOD DO FI HT HY IN MA SE OR RA
1: NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2: 15 May 2014 746.18 549.90 406.57 1788.86 2286.00 3639.25 1160.13 182.83 787.13 853.20
3: 16 May 2014 746.18 549.90 406.57 1788.86 2286.00 3639.25 1160.13 182.83 787.13 853.20
4: 18 May 2014 744.34 546.50 406.66 1767.69 2302.37 3622.08 1144.77 182.83 775.39 849.67
5: 19 May 2014 739.95 549.65 404.73 1772.34 2313.14 3569.53 1129.72 182.83 764.82 844.49
Quindi, mi chiedevo se esiste un metodo data.table (univoco) per cambiare i nomi quando i nomi non sono univoci (anche in questo caso i dati sono stati importati da Excel).
Grazie per l'aiuto. – user227710