2016-10-11 3 views
0

У меня есть таблица в R, и я хочу получить записи столбца в dataframe для чтения в виде 'a,b,c,d,e' вместо [1] a b c d, так как я хочу передать его в sql-запрос для WHERE DUMMY IN ('a,b,c,d,e')Создайте список, разделенный запятой, из столбца в 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 (буквы [1: 5])' является обобщающим для этого тоже. – thelatemail

+0

Ну, а будет. Даже написанный Р. Джентльменом. Он начинается с 'string <- paste (x, collapse =", ")' и я отмечаю, что дополнительное пространство после запятой не было частью запрошенного результата. –

+0

Для целей SQL пустое пространство не имеет значения, но да, оно немного отличается. – thelatemail

2

Я предполагаю, что то, что вы действительно хотите это строка "'a', 'b', 'c', 'd'". Мы можем использовать shQuote, чтобы процитировать элементы и toString, чтобы превратить их в одну строку, разделенную запятой. Наконец вставить его в инструкцию SQL с помощью sprintf:

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 (let)» и удалил Note. Если бы не были кавычки вокруг элементов, они бы ссылались на столбец 'a', column' b' и т. Д., Что кажется маловероятным. –

Смежные вопросы