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:

  1. names(df)[1] <- "a"
  2. select(df, a=1)
  3. 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?

Author: Henrik, 2014-04-03

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

 49
Author: Henrik,
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"))
 2
Author: Andy,
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