Na przykład, jeśli mam to:
n = c(2, 3, 5)
s = c("aa", "bb", "cc")
b = c(TRUE, FALSE, TRUE)
df = data.frame(n, s, b)
n s b
1 2 aa TRUE
2 3 bb FALSE
3 5 cc TRUE
Następnie jak połączyć dwie kolumny n
i s
utworzyć nową kolumnę nazwaną x
tak, aby wyglądała tak:
n s b x
1 2 aa TRUE 2 aa
2 3 bb FALSE 3 bb
3 5 cc TRUE 5 cc
r
dataframe
multiple-columns
r-faq
user2654764
źródło
źródło
paste()
? Na przykład powyżejx
kolumna powinna zawierać dane jako2-aa
, then3-bb
i5-cc
.paste(df$n,df$s,sep="-")
s
ma wartość NA? (Nie lubię widzieć,3 NA
czydf$s[2]=NA
)Aby wstawić separator:
źródło
A - B
zamiastA-B
. Czy można usunąć tę dodatkową przestrzeń?paste(df$n,df$s,sep="-")
sep
argument ...). Jednak druga odpowiedź, opublikowana prawie 4 lata wcześniej niż twoja, doskonale odpowiada na to pytanie.Jak już wspomniano w komentarzach Uwe i UseR, ogólnym rozwiązaniem w
tidyverse
formacie byłoby użycie poleceniaunite
:źródło
x
reprezentuje nazwę nowej kolumny zawierającej połączone wartości. Pomyśl o dplyrzemutate
:df %>% dplyr::mutate(x = "your operations")
Niektóre przykłady z NA i ich usuwanie za pomocą Apply
źródło
tidyr
pakietu do odtworzenia oczekiwanej odpowiedzi na oryginalne pytanie byłoby to jedno-liner:tidyr::unite(df, x, n, s, sep = " ", remove = FALSE)[, c(names(df), "x")]
. Jednak nie widzę powodu, aby to robić, ponieważdf$x <- paste(df$n,df$s)
jest to znacznie prostsze.paste
lubtidyr::unite
.Używając
dplyr::mutate
:źródło
dplyr::mutate()
. Przepraszam, tylko staram się być pomocny - nie będę już zanieczyszczać witryny i powstrzymać się od przyszłych postów.Możemy użyć paste0 :
Jeśli nie chcesz, aby w połączonym polu było wprowadzane żadne spacje. Jest to bardziej przydatne, jeśli planujesz użyć połączonego pola jako unikalnego identyfikatora, który reprezentuje kombinacje dwóch pól.
źródło
Zamiast
paste
(spacje domyślne),paste0
(wymuś włączenie brakuNA
jako znaku) lubunite
(ograniczone do 2 kolumn i 1 separatora),Proponuję alternatywę tak elastyczną, jak,
paste0
ale ostrożniejszą zNA
:stringr::str_c
Utworzono 10.04.2020 r. Przez pakiet reprex (v0.3.0)
dodatkowa uwaga z
str_c
dokumentacjiźródło
paste0(n,"-",s,".",b)
istr_c(n,"-",s,".",b)
są dokładnie takie same, oba używają domyślnego separatora, którym jest pusty ciąg''
. Nie wiem też, dlaczegopaste
jest „uporządkowany”, to znaczy, że nie lubisz spacji?paste0
istr_c
nie są dokładnie takie same. spójrz na te linki: (1) rdocumentation.org/packages/stringr/versions/1.3.1/topics/str_c (2) stackoverflow.com/questions/53118271/…str_c
dokumentacja mogłaby być też bardziej wyraźna!).Istnieją inne świetne odpowiedzi, ale w przypadku, gdy nie znasz nazw kolumn lub liczby kolumn, które chcesz wcześniej połączyć, przydatne są następujące.
źródło