names(mydat)[c(name)]<-c("newname")
Z tego wiem, że nazwa kolumny / zmiennej „name” ramki danych mydat jest zastąpiona przez „newname”.
Moje pytanie brzmi: czy chcę to zrobić za pomocą pętli, aby uzyskać coś takiego:
newname1 newname2 newname3 newname4 i tak dalej, jak to zrobić?
Oto, co zadziałało i nie zadziałało:
for(i in 1:4){
names(mydat)[c(name)]<-c("newname"i)
}
Czy istnieje sposób, aby to zakodować? wielkie dzięki dla wszystkich, którzy mogliby pomóc. Owusu Isaac
ugly_vars <- names(dplyr::select(df, starts_with("abcde_")))
names(ESM_df[ugly_vars]) <- str_c("abc_", 1:length(ugly_vars))
Odpowiedzi:
Najbardziej oczywistym rozwiązaniem byłaby zmiana kodu w pętli for za pomocą:
Ale musisz wyjaśnić, jaka jest twoja zmienna
name
. W tej chwili ta pętla wykona 4 nazwy jednej kolumny.Ogólnie rzecz biorąc, jeśli nazwy, które chcesz zmienić, znajdują się w wektorze, jest to standardowa procedura podzestawu:
źródło
Spróbuj użyć
sprintf
lubpaste
:Zauważ też, że
names(mydat)[c(name)]
jest to mniej nonsens;c(name)
jest równoważne z zapisem justname
i oznacza „pobierz wartość zmiennej o nazwiename
”; nawias przynajmniej wyodrębni elementy,names(mydat)
ale tylko wtedy, gdyname
zmienna zawiera indeks liczbowy lub logiczny.Jeśli chcesz wymienić kolumny zwane
name
zname1, name2, ..., nameN
użyć coś takiego:EDYCJA: Cóż, jeśli chcesz po prostu usunąć zduplikowane nazwy kolumn, istnieje jeszcze łatwiejszy sposób; R ma
make.names
funkcję, która rozwiązuje ten problem; można go użyć w następujący sposób:Jeszcze krócej, to samo można uzyskać tylko pisząc:
źródło
grepl
byłoby bardziej odpowiednie do wykonywania bardziej ogólnej pracy.Miałem ten sam problem i rozwiązałem go za pomocą tego kodu:
źródło