2015-04-26 12 views
5

Moja dataframe które czytam z pliku CSV zawiera nazwy kolumn, jak toJak usunąć "." od nazw kolumn w ramce danych?

abc.def, ewf.asd.fkl, qqit.vsf.addw.coil

Chcę usunąć „” od wszystkich imion i konwertować je do

abcdef, eqfasdfkl, qqitvsfaddwcoil.

Próbowałem przy użyciu polecenia sub sub(".","",colnames(dataframe)) ale ta komenda wyjął pierwszą literę nazwy każdej kolumny i nazwy kolumn zmienia się

bc.def, wf.asd.fkl, qit.vsf.addw.coil

Każdy zna inne polecenie, aby to zrobić. Mogę zmienić nazwę kolumny jeden po drugim, ale mam dużo plików z 30 lub więcej kolumnami w każdym pliku.

Jeszcze raz chcę usunąć "." ze wszystkich nazw. Próbuję to zrobić, aby móc używać poleceń "sqldf", które nie radzą sobie dobrze z "."

Dziękuję za pomoc

Odpowiedz

11

1) sqldf może uporać się z nazwy posiadające kropki w nich, jeśli przytoczę nazwiska:

library(sqldf) 
d0 <- read.csv(text = "A.B,C.D\n1,2") 
sqldf('select "A.B", "C.D" from d0') 

podając:

A.B C.D 
1 1 2 

2) Podczas odczytu danych przy użyciu argumentu read.table lub read.csv użyj argumentu check.names=FALSE.

Porównaj:

Lines <- "A B,C D 
1,2 
3,4" 
read.csv(text = Lines) 
## A.B C.D 
## 1 1 2 
## 2 3 4 
read.csv(text = Lines, check.names = FALSE) 
## A B C D 
## 1 1 2 
## 2 3 4 

jednak w tym przypadku nadal pozostawia nazwę, która musiałaby być cytowane w sqldf od nazwy spacje.

3) po prostu usunąć okresach, DF jest ramka danych:

lub może być lepszy do przekształcenia okresów dla podkreślenia, tak, że w obu kierunkach:

names(DF) <- gsub(".", "_", names(DF), fixed = TRUE) 

Ostatnia linia może być alternatywnie wykonana tak:

names(DF) <- chartr(".", "_", names(DF)) 
4

zastąpić wszystkie kropki w nazwach musisz użyć gsub, zamiast sub, który zastąpi tylko pierwsze wystąpienie.

To powinno zadziałać.

test <- data.frame(abc.def = NA, ewf.asd.fkl = NA, qqit.vsf.addw.coil = NA) 
names(test) <- gsub(".", "", names(test), fixed = TRUE) 
test 
    abcdef ewfasdfkl qqitvsfaddwcoil 
1  NA  NA    NA 
Powiązane problemy