如何在新行中分隔R中的逗号分隔值?

时间:2015-05-29 09:21:29

标签: r

我有一个数据集如下:

col1    col2
a        1,2,3
b        ["1","2"]
c        4

我希望输出为:

col1     col2
a         1
a         2
a         3
b         1
b         2
c         4

是否可以在R中这样做?如果是,怎么样?

2 个答案:

答案 0 :(得分:11)

您可以从我的“splitstackshape”软件包中尝试{ "countries": [ {...} ], "states" [ {...} ], "cities": [ {...} ] }

cSplit

当然,我非常偏向library(splitstackshape) cSplit(as.data.table(mydf)[, col2 := gsub("[][\"]", "", col2)], "col2", ",", "long") # col1 col2 # 1: a 1 # 2: a 2 # 3: a 3 # 4: b 1 # 5: b 2 # 6: c 4 ,但您也可以使用“tidyr”中的“dplyr”和cSplit

unnest

或者只是使用“data.table”:

library(dplyr)
library(tidyr)

mydf %>%
  mutate(col2 = strsplit(gsub("[][\"]", "", col2), ",")) %>%
  unnest(col2)

答案 1 :(得分:1)

separate_rows()中的tidyr函数是具有多个分隔值的观察的老大。由于您混合了整数和字符串(但只想在最终结果中使用整数,请设置convert = TRUE并使用drop_na()(也在tidyr中)过滤掉新行否则,方括号将会去。

# create data 
library(tidyverse)
d <- data_frame(
  col1 = c("a", "b", "c"), 
  col2 = c("1,2,3", "[\"1\",\"2\"]", 4)
)
d
# # A tibble: 3 x 2
#    col1            col2
#   <chr>           <chr>
# 1     a           1,2,3
# 2     b "[\"1\",\"2\"]"
# 3     c               4

# tidy data
separate_rows(d, col2, convert = TRUE) %>%
   drop_na()
# # A tibble: 6 x 2
#    col1  col2
#   <chr> <int>
# 1     a     1
# 2     a     2
# 3     a     3
# 4     b     1
# 5     b     2
# 6     c     4