我有一个数据集如下:如何在新行中分隔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中这样做呢?如果是,如何?
我有一个数据集如下:如何在新行中分隔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中这样做呢?如果是,如何?
你可以尝试cSplit
从我的 “splitstackshape” 套餐:
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
当然,我非常偏cSplit
,但你也可以使用由 “tidyr” “dplyr” 和unnest
:
library(dplyr)
library(tidyr)
mydf %>%
mutate(col2 = strsplit(gsub("[][\"]", "", col2), ",")) %>%
unnest(col2)
,或只与 “data.table”:
library(data.table)
as.data.table(mydf)[, list(
col2 = unlist(strsplit(gsub("[][\"]", "", col2), ","))),
by = col1]
谢谢!我已经在使用这个软件包,但只能将值分割成新列。 –
tidyr
中的separate_rows()
函数是具有多个分隔值的观测值的老大。当你有整数和字符串的混合(而只是希望在最终结果的整数,集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
这是可能的,并称为“解析”。“strsplit”在这里很有用。 – Roland
如果你可以创建没有CSV值的数据框,你会让你的生活变得更容易。首先处理csv –
你的数据结构不清楚,请提供你的数据的'dput' –