我有一些看起來像這樣的資料:
X1
A,B,C,D,E
A,B
A,B,C,D
A,B,C,D,E,F
我想生成一個包含每個向量的第一個元素(“A”)的列,以及另一個包含所有其余值的列(“B”,“C”等):
X1 Col1 Col2
A,B,C,D,E A B,C,D,E
A,B A B
A,B,C,D A B,C,D
A,B,C,D,E,F A B,C,D,E,F
我嘗試了以下方法:
library(dplyr)
testdata <- data.frame(X1 = c("A,B,C,D,E",
"A,B",
"A,B,C,D",
"A,B,C,D,E,F")) %>%
mutate(Col1 = sapply(strsplit(X1, ","), "[", 1),
Col2 = sapply(strsplit(X1, ","), "[", -1))
但是,我似乎無法擺脫 Col2 中值周圍的討厭的向量括號。有什么辦法嗎?
uj5u.com熱心網友回復:
您可以tidyr::separate使用extra = "merge":
testdata %>%
tidyr::separate(X1, into = c("Col1","Col2"), sep = ",", extra = "merge", remove = F)
X1 Col1 Col2
1 A,B,C,D,E A B,C,D,E
2 A,B A B
3 A,B,C,D A B,C,D
4 A,B,C,D,E,F A B,C,D,E,F
uj5u.com熱心網友回復:
一個可能的解決方案,使用tidyr::separate:
library(tidyverse)
df <- data.frame(
stringsAsFactors = FALSE,
X1 = c("A,B,C,D,E", "A,B", "A,B,C,D", "A,B,C,D,E,F")
)
df %>%
separate(X1, into = str_c("col", 1:2), sep = "(?<=^.),", remove = F)
#> X1 col1 col2
#> 1 A,B,C,D,E A B,C,D,E
#> 2 A,B A B
#> 3 A,B,C,D A B,C,D
#> 4 A,B,C,D,E,F A B,C,D,E,F
uj5u.com熱心網友回復:
sub使用 嘗試下面的基本 R 代碼read.table
cbind(
df,
read.table(
text = sub(",", " ", df$X1)
)
)
這使
X1 V1 V2
1 A,B,C,D,E A B,C,D,E
2 A,B A B
3 A,B,C,D A B,C,D
4 A,B,C,D,E,F A B,C,D,E,F
uj5u.com熱心網友回復:
您可以使用str_sub()如下功能:
> df
# A tibble: 4 x 1
X1
<chr>
1 A,B,C,D,E
2 A,B
3 A,B,C,D
4 A,B,C,D,E,F
> df %>% mutate(X2 = str_sub(X1, 1,1), X3 = str_sub(X1, 3))
# A tibble: 4 x 3
X1 X2 X3
<chr> <chr> <chr>
1 A,B,C,D,E A B,C,D,E
2 A,B A B
3 A,B,C,D A B,C,D
4 A,B,C,D,E,F A B,C,D,E,F
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/421086.html
標籤:
