2013-08-07 2 views

답변

54

사용 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 - 어떻게 '붙여 넣기()'사용하여 데이터 포인트 사이에 특수 문자를 추가합니다.? 위의 예에서 'x'열은 '2-aa', '3-bb'및 '5-cc'로 데이터를 가져야합니다. –

+1

. @ thelatemail - 이것은 나를 위해 일했다 :'paste (df $ n, df $ s, sep = "-") ' –

-3

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

이것은 OP가 묻는 것을 산출하지 않는다 – Ferroao

+0

cbind는 연결하지 않고 오히려 여러 데이터 프레임을 새로운 데이터 프레임으로 바꾼다 –

5

NAS 및 제거하여 그 일부 예로는 세퍼레이터를 삽입

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

원래 질문의 예상 답변을 재현하기 위해'tidyr' 패키지를 사용하고 싶다면 이것은 한 줄짜리 코드 일 것입니다 :'tidyr :: unite (df, x, n, s, sep = " ", 제거 = 거짓) [, c (이름 (df),"x ")]]. 그러나'df $ x <- paste (df $ n, df $ s)'가 훨씬 간단하기 때문에 그렇게 할 이유가 없습니다. – Uwe

+0

@Ferroao 글쎄, 답은 너무 일반적이어서는 안됩니다. 그렇지 않으면 모든 질문에 모든 것을 통합 한 거대한 대답이 하나 있습니다. NA의 삭제는 OP의 단순한 질문의 일부가 아니므로, 그 여분의 복잡성이 단순한'붙여 넣기'또는'tidyr :: unite'에 부가 가치를 부가하는 것을 보지 못합니다. – useR

+0

대답은 프로 시저가 여러 열에 적용될 수 있도록 허용합니다.이 경우 NA의 모양이 매우 가능성이 있습니다. – Ferroao

14

df$x <- paste(df$n,"-",df$s) 적용. 당신이 연결된 분야에 도입 패딩 공간을 원하지 않는 경우

+0

. @ LittleBee - 두 데이터 사이에 공백을 추가합니다. 예를 들어 최종 출력은'A-B' 대신'A-B'와 같습니다. 이 여분의 공간을 제거 할 수 있습니까? –

+2

. @ LittleBee - 이것은 나를 위해 일했다 :'paste (df $ n, df $ s, sep = "-")' –

+1

paste 대신 paste0을 사용한다. – Ferroao

1

당신은 df$combField <- paste0(df$x,df$y)

를 사용할 수 있습니다. 이것은 결합 된 필드를 두 필드의 조합을 나타내는 고유 한 ID로 사용할 계획이라면 더 유용합니다.

0

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 
관련 문제