如何在 R 中将一列拆分为多个(不相等的)列
How to split a column into multiple (non equal) columns in R
我正在处理一个字符串,它是由逗号分隔的元素列表。我想分隔字符串,以便每个元素都有其列。但是我遇到了麻烦,因为每个列表的元素数量不同。
X1 <- "a,b,c"
X2 <- "a,b"
X3 <- "a,b,c,d"
DF <- data.frame(Col1= rbind(X1,X2,X3))
Col1
X1 a,b,c
X2 a,b
X3 a,b,c,d
我希望它看起来像这样。每个元素都有自己的列,无论字符字符串中有多少个元素。
Col1 Col2 Col3 Col4
X1 a b c
X2 a b
X3 a b c d
谢谢!
我们可以使用 splitstackshape
中的 cSplit
library(splitstackshape)
cSplit(DF, "Col1",",")
-输出
cSplit(DF, "Col1",",")
Col1_1 Col1_2 Col1_3 Col1_4
1: a b c <NA>
2: a b <NA> <NA>
3: a b c d
使用 stringr
的替代解决方案:
X1 <- "a,b,c"
X2 <- "a,b"
X3 <- "a,b,c,d"
DF <- data.frame(Col1= rbind(X1,X2,X3))
require(stringr)
data.frame(str_split(DF$Col1, ",", simplify=TRUE))
输出
X1 X2 X3 X4
1 a b c
2 a b
3 a b c d
另一种方式:我们可以:
library(tidyverse)
as_tibble(DF) %>% separate(Col1, into = paste("Col", 1:4, sep = "_"))
Col_1 Col_2 Col_3 Col_4
<chr> <chr> <chr> <chr>
1 a b c NA
2 a b NA NA
3 a b c d
我正在处理一个字符串,它是由逗号分隔的元素列表。我想分隔字符串,以便每个元素都有其列。但是我遇到了麻烦,因为每个列表的元素数量不同。
X1 <- "a,b,c"
X2 <- "a,b"
X3 <- "a,b,c,d"
DF <- data.frame(Col1= rbind(X1,X2,X3))
Col1
X1 a,b,c
X2 a,b
X3 a,b,c,d
我希望它看起来像这样。每个元素都有自己的列,无论字符字符串中有多少个元素。
Col1 Col2 Col3 Col4
X1 a b c
X2 a b
X3 a b c d
谢谢!
我们可以使用 splitstackshape
cSplit
library(splitstackshape)
cSplit(DF, "Col1",",")
-输出
cSplit(DF, "Col1",",")
Col1_1 Col1_2 Col1_3 Col1_4
1: a b c <NA>
2: a b <NA> <NA>
3: a b c d
使用 stringr
的替代解决方案:
X1 <- "a,b,c"
X2 <- "a,b"
X3 <- "a,b,c,d"
DF <- data.frame(Col1= rbind(X1,X2,X3))
require(stringr)
data.frame(str_split(DF$Col1, ",", simplify=TRUE))
输出
X1 X2 X3 X4
1 a b c
2 a b
3 a b c d
另一种方式:我们可以:
library(tidyverse)
as_tibble(DF) %>% separate(Col1, into = paste("Col", 1:4, sep = "_"))
Col_1 Col_2 Col_3 Col_4
<chr> <chr> <chr> <chr>
1 a b c NA
2 a b NA NA
3 a b c d