Mam następujący data.frame:Jak wymienić data.frame nazwy kolumn sznurkiem w odpowiedniej tabeli przeglądowej w R
set.seed(126)
df <- data.frame(a=sample(c(1:100, NA), 10), b=sample(1:100, 10), c=sample(1:100, 10), d = c(1:10))
a b c d
1 18 27 53 1
2 44 16 66 2
3 58 47 3 3
...
i następującą tabelą przeglądową:
varnames <- data.frame(old = c("a", "b", "c"), new = c("dog", "cat", "mouse"))
old new
1 a dog
2 b cat
3 c mouse
Co Ja zamiast tego próbujesz zastąpić names(df)
odpowiednim ... Jeśli names(df)
nie jest w varnames$old
, zachowaj nazwę kolumny w df ...
Powstały data.frame Chciałbym wrócił wyglądałby następująco:
dog cat mouse d
1 57 10 83 1
2 53 99 94 2
3 99 60 39 3
...
Wszelka pomoc mile widziana.
Myślę, że w przypadku, gdy 'varnames' nigdy nie ma nazw kolumn, które nie są obecne w' df' (tak jak zakładałeś w implementacji 'setnames', w przeciwnym razie to nie zadziała), możesz uprościć swoje pierwsze dwa linie do samych nazw (df) [dopasowanie (varnames $ old, names (df))] <- as.character (varnames $ new) '. Niezła implementacja 'setnames' btw. –
@DavidArenburg w rzeczywistości 'data.table' wersja' setnames' nie zakłada, że wszystkie wartości są obecne w wektorze zastępczym. Wszystkie powyższe metody powinny być równoważne, jak napisane. – MrFlick
Co mam na myśli to, że jeśli zmienisz 'varnames', aby wypowiedzić' varnames <- data.frame (stare = c ("l", "b", "c"), nowe = c ("pies", " cat "," mouse "))', twoje podstawowe podejście R nadal będzie działało zgodnie z oczekiwaniami, a 'setnames' zawiedzie. –