dplyr: wybierz nazwy kolumn zawierające białe spacje
df <- structure(list(`a a` = 1:3, `a b` = 2:4), .Names = c("a a", "a b"
), row.names = c(NA, -3L), class = "data.frame")
A dane wyglądają jak
a a a b
1 1 2
2 2 3
3 3 4
Po wywołaniu wybierz
select(df, 'a a')
Daje
Error in abs(ind[ind < 0]) :
non-numeric argument to mathematical function
Jak mogę wybrać "a a" i/lub zmienić nazwę na coś bez spacji używając select
? Znam następujące podejścia:
names(df)[1] <- "a"
select(df, a=1)
select(df, ends_with("a"))
Ale jeśli pracuję na dużym zestawie danych, jak Mogę uzyskać dokładne dopasowanie bez znajomości numeru indeksu lub podobnych nazw kolumn?
2 answers
Możesz select
zmienną używając backticks `
.
select(df, `a a`)
# a a
# 1 1
# 2 2
# 3 3
Jeśli jednak twoim głównym celem jest zmiana nazwy kolumny, możesz użyć rename
w plyr
pakiecie, w którym możesz używać zarówno ""
, jak i ``
.
rename(df, replace = c("a a" = "a"))
rename(df, replace = c(`a a` = "a"))
Lub w base
R:
names(df)[names(df) == "a a"] <- "a"
Aby uzyskać dokładniejszy opis użycia różnych cytatów, Zobacz ?Quotes
. Szczególnie istotna jest tutaj sekcja "nazwy i identyfikatory":
Inne [niepoprawne składniowo] nazwy mogą być użyte pod warunkiem, że są cytowane. Preferowanym cytatem jest backtick".
Zobacz też ?make.names
o poprawnych nazwach.
Zobacz this post o zmianie nazwy w dplyr
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-14 14:49:52
Niektóre alternatywy dla backsticków, dobre od dplyr 0.5.0, aktualna wersja w chwili pisania tego tekstu.
Jeśli próbujesz programowo wybrać argument jako kolumnę i nie chcesz zmienić nazwy lub zrobić czegoś takiego paste
/sprintf
Nazwa kolumny w backticks, można użyć as.name
w połączeniu z niestandardową wersją select
, czyli select_
:
dplyr::select_(df, as.name("a a"))
Wiele funkcji dplyr
ma niestandardowe wersje. W przypadku select
w szczególności, można również używać wersji standardowej w połączeniu z select helper one_of
. Zobacz ?dplyr::select_helpers
dla dokumentacji:
dplyr::select(df, dplyr::one_of("a a"))
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-10-03 21:18:44