Как добавить двойные кавычки и запятую в столбец в R данных? - PullRequest
0 голосов
/ 14 ноября 2018

У меня есть датафрейм с одним столбцом. Я хочу, чтобы все значения в столбце были заключены в двойные кавычки и запятую, как показано ниже.

df <- data.frame("SN" = 1:4, "Name" = c("John", "Dora","Peter","Lilly"), stringsAsFactors = FALSE)

df$Name 

Когда я извлекаю столбец Имя, я хочу его df$Name как

"John",
"Dora",
"Peter",
"Lilly"

Я пробовал paste, gsub и shQuote, но это не дает мне желаемого результата. Любая помощь приветствуется.

1 Ответ

0 голосов
/ 14 ноября 2018
data.frame(
  SN = 1:4,
  Name = c("John", "Dora", "Peter", "Lilly"),
  stringsAsFactors = FALSE
) -> xdf

sprintf():

sprintf('"%s",', xdf$Name)
## [1] "\"John\","  "\"Dora\","  "\"Peter\"," "\"Lilly\","

cat(sprintf('"%s",', xdf$Name), sep="\n")
## "John",
## "Dora",
## "Peter",
## "Lilly",

paste():

paste('"', xdf$Name, '",', sep = "")
## [1] "\"John\","  "\"Dora\","  "\"Peter\"," "\"Lilly\","

cat(paste('"', xdf$Name, '",', sep = ""), sep="\n")
## "John",
## "Dora",
## "Peter",
## "Lilly",

sub():

sub("$", '",', sub("^", '"', xdf$Name))
## [1] "\"John\","  "\"Dora\","  "\"Peter\"," "\"Lilly\","

cat(sub("$", '",', sub("^", '"', xdf$Name)), sep="\n")
## "John",
## "Dora",
## "Peter",
## "Lilly",

FWIW sprintf() побед:

microbenchmark::microbenchmark(
  sprintf = sprintf('"%s",', xdf$Name),
  paste = paste('"', xdf$Name, '",', sep = ""),
  sub = sub("$", '",', sub("^", '"', xdf$Name))
)
## Unit: microseconds
##     expr    min      lq     mean  median      uq     max neval
##  sprintf 11.705 13.4955 25.91594 19.6095 32.1780 170.989   100
##    paste 13.133 15.3150 34.31982 19.0455 31.9615 340.482   100
##      sub 31.271 34.8555 64.41124 39.8840 78.0180 533.065   100

ОБНОВЛЕНИЕ

Я решил, что вы стремитесь к:

paste0(sprintf('"%s"', xdf$Name), collapse = ", ")
## [1] "\"John\", \"Dora\", \"Peter\", \"Lilly\""

cat(paste0(sprintf('"%s"', xdf$Name), collapse = ", "))
## "John", "Dora", "Peter", "Lilly"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...