我有一個數據集如下:如何在新行中分隔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' –