2016-10-11 3 views
0

R이있는 표가 있는데 [1] a b c d 대신 'a,b,c,d,e' 대신 데이터 프레임의 항목을 가져와서 전달하고 싶습니다. WHERE DUMMY IN ('a,b,c,d,e')에 대한 SQL 쿼리에열의 쉼표로 구분 된 목록 만들기 R

쉬운 방법이 있나요? 나는 그것을 거대한 문자열로 만들고 모든 ''의 끝에 ','를 추가하는 것으로 추측하고 있지만 R이이 형식으로 자동으로 읽는 방식으로 열을 단순히 방해하는 방법 일지 궁금해하고 있습니다.

어떤 제안이 좋을 것입니다.

감사합니다.

답변

5

letters 벡터 내장 R이며, paste0이 경우, 지정된 분리 문자로 쉼표 당신에게 "붕괴"벡터를 할 수 있습니다 :이 편지를 어떤 형태

> paste0(letters[1:5], collapse=",") 
[1] "a,b,c,d,e" 

그것은 명확하지 않았다을 dataframe에 있었지만, 그들은 단순히라는 이름의 컬럼 인 경우, letts 말, 당신이 할 수 있습니다 :

paste0(dfrm$letts, collapse=",") 
+0

'toString (letters [1 : 5])'도이 약식입니다. – thelatemail

+0

글쎄, 아,있을거야. R. Gentleman도 썼습니다. 그것은'string <- paste (x, collapse = ",")'로 시작하고 쉼표가 요청 된 결과의 일부가 아니 었음을 알 수 있습니다. –

+0

SQL의 경우 공백은 중요하지 않지만 예, 약간 다릅니다. – thelatemail

2

나는 당신이 정말 원하는 것은 문자열 "'a', 'b', 'c', 'd'" 있다고 가정합니다. 요소를 인용 할 때는 shQuote을 사용하고 쉼표로 구분 된 단일 문자열로 바꾸려면 toString을 사용할 수 있습니다. 마지막으로 sprintf을 사용하여 SQL 문에 삽입하십시오.

lets <- c("a", "b", "c", "d") 
s <- toString(shQuote(lets)) 

s 
## [1] "'a', 'b', 'c', 'd'" 

sql <- sprintf("select * from mytab where mycol in (%s)", s) 
sql 
## [1] "select * from mytab where mycol in ('a', 'b', 'c', 'd')" 
+0

Mac에서도 동일하게 작동합니다. 그러나 OP가 열 이름을 개별적으로 인용해야하는지 궁금합니다. 그가 요구 한 것이 아니지만, 당신이 인정한 (적어도 나에게) SQL-meister라는 것을 알고 있습니다. –

+0

Mac에서도 작동하기 때문에'shQuote (lets)'로 단축하고 Note를 삭제했습니다. 요소 주위에 따옴표가 없다면 열 'a', 열'b' 등을 나타낼 것입니다. –

관련 문제