如何在R中将列值合并为带单引号的SQL可用逗号分隔字符串
问题描述
现有模拟数据与代码:
# 创建模拟数据 data <- data.frame(test = c('a2','t33b','s5c','d102','e4e','df1f')) data <- as_tibble(data)
当前使用的代码:
data2 <- data %>% summarise(test2 = toString(test)) %>% ungroup()
当前输出:
# A tibble: 1 x 1 test2 <chr> 1 a2, t33b, s5c, d102, e4e, df1f
希望得到每个元素带单引号的逗号分隔字符串,用于后续构建SQL查询,期望输出如下:
# A tibble: 1 x 1 test2 <chr> 1 'a2', 't33b', 's5c', 'd102', 'e4e', 'df1f'
解决方案
方法1:结合str_c与toString
先给每个元素添加单引号,再拼接成目标字符串:
library(dplyr) library(stringr) data2 <- data %>% mutate(test_quoted = str_c("'", test, "'")) %>% summarise(test2 = toString(test_quoted)) %>% ungroup()
方法2:直接用str_c的collapse参数(更简洁)
无需额外mutate步骤,在summarise中一步完成引号添加与拼接:
library(dplyr) library(stringr) data2 <- data %>% summarise(test2 = str_c("'", test, "'", collapse = ", ")) %>% ungroup()
方法3:基础R实现(无需加载tidyverse包)
用基础R的paste0和paste组合完成需求:
data2 <- data.frame( test2 = paste0("'", data$test, "'", collapse = ", ") ) # 如需转为tibble格式,可添加: data2 <- as_tibble(data2)
内容的提问来源于stack exchange,提问作者SqueakyBeak
相关产品推荐
相关产品推荐

