2013-08-07 19 views

Odpowiedz

54

użytkowania paste.

df$x <- paste(df$n,df$s) 
df 
# n s  b x 
# 1 2 aa TRUE 2 aa 
# 2 3 bb FALSE 3 bb 
# 3 5 cc TRUE 5 cc 
+0

@ thelatemail - Jak dodać znak specjalny między punktami danych wykorzystujących 'pasta()'.? W powyższym przykładzie kolumna 'x' powinna mieć dane jako' 2-aa', następnie '3-bb' i' 5-cc'. –

+1

. @ Thelatemail - To działało dla mnie: 'wklej (df $ n, df $ s, sep =" - ")' –

-3

Można również użyć cbind.

cbind(df,n,s) 
    n s  b n s 
1 2 aa TRUE 2 aa 
2 3 bb FALSE 3 bb 
3 5 cc TRUE 5 cc 
+0

nie tworzy tego, co OP pyta – Ferroao

+0

cbind nie łączy się, raczej łączy dołącza kolumny z wielu danych ramka w nową ramkę danych –

5

Przykłady z NAS i ich usunięcia za pomocą zastosowania

n = c(2, NA, NA) 
s = c("aa", "bb", NA) 
b = c(TRUE, FALSE, NA) 
c = c(2, 3, 5) 
d = c("aa", NA, "cc") 
e = c(TRUE, NA, TRUE) 
df = data.frame(n, s, b, c, d, e) 

sep=" " 
df$x <- apply(df[ , c(1:6) ] , 1 , paste_noNA , sep=sep) 
df 

paste_noNA <- function(x,sep=", ") 
gsub(", " ,sep, toString(x[!is.na(x) & x!="" & x!="NA"])) 
+2

Jeśli chcesz użyć pakietu 'tidyr' do odtworzenia oczekiwanej odpowiedzi na pierwotne pytanie, będzie to jedna linijka:' tidyr :: unite (df, x, n, s, sep = " ", remove = FALSE) [, c (names (df)," x ")]'. Jednak nie widzę powodu, aby to zrobić, ponieważ 'df $ x <- paste (df $ n, df $ s)' jest znacznie prostsze. – Uwe

+0

@Ferroao Cóż, odpowiedzi nie powinny być zbyt ogólne, w przeciwnym razie każde pytanie miałoby tylko jedną gigantyczną odpowiedź zawierającą wszystko. Usunięcie NA nie było częścią prostego pytania OP, więc nie widzę, jak ta dodatkowa złożoność dodaje wartość do prostego 'paste' lub' tidyr :: unite'. – useR

+0

Odpowiedź umożliwia zastosowanie procedury do kilku kolumn, w którym to przypadku pojawienie się NA jest bardzo prawdopodobne. – Ferroao

14

df$x <- paste(df$n,"-",df$s) wstawiania separator.

+0

. @ LittleBee - Dodaje spację między dwoma danymi. Ostateczne wyjście na przykład wygląda tak: 'A - B' zamiast' A-B'. Czy można usunąć tę dodatkową przestrzeń? –

+2

. @ LittleBee - To działało dla mnie: 'wklej (df $ n, df $ s, sep =" - ")' –

+1

użyj paste0 zamiast wklejania – Ferroao

1

Można użyć df$combField <- paste0(df$x,df$y)

Jeśli nie chcesz żadnego miejsca dopełnienia wprowadzoną w polu łączonych. Jest to bardziej przydatne, jeśli planujesz użyć połączonego pola jako unikalnego identyfikatora reprezentującego kombinację dwóch pól.

0

Korzystanie dplyr::mutate:

library(dplyr) 
df <- mutate(df, x = paste(n, s)) 

df 
> df 
    n s  b x 
1 2 aa TRUE 2 aa 
2 3 bb FALSE 3 bb 
3 5 cc TRUE 5 cc 
Powiązane problemy