在我的資料框中有一個這樣的字串列。
str=as.character(c("M 12; M 13","M 24", NA, "C 12; C 50; C 78"))
no=seq(1:4)
data.frame(no,str)
no str
1 1 M 12; M 13
2 2 M 24
3 3 <NA>
4 4 C 12; C 50; C 78
它有多個值,以“;”分隔 象征。我需要將其拆分為多列(基于此示例的 3 列),因為每一列僅包含字串的一個值。這可以使用 R 嗎?
uj5u.com熱心網友回復:
這是使用以下extra = merge引數的好時機separate:
library(dplyr)
df %>%
separate(str, c('A', 'B', 'C'), sep= ";", extra = 'merge')
no A B C
1 1 M 12 M 13 <NA>
2 2 M 24 <NA> <NA>
3 3 <NA> <NA> <NA>
4 4 C 12 C 50 C 78
uj5u.com熱心網友回復:
您可以使用str_split. 請注意,我假設您想為新列指定一個有意義的名稱,因此我添加了一個rename_with,但如果您不需要,您可以將其洗掉:
library(tidyverse)
df <- data.frame(str = c("M 12; M 13","M 24", NA, "C 12; C 50; C 78"),
no = seq(1:4))
df %>%
mutate(splits = str_split(str, "; ")) %>%
unnest_wider(splits) %>%
rename_with(.cols = starts_with("..."),
.fn = ~paste0("split_", 1:length(which(str_detect(., "...")))))
這使:
# A tibble: 4 x 5
str no split_1 split_2 split_3
<chr> <int> <chr> <chr> <chr>
1 M 12; M 13 1 M 12 M 13 <NA>
2 M 24 2 M 24 <NA> <NA>
3 <NA> 3 <NA> <NA> <NA>
4 C 12; C 50; C 78 4 C 12 C 50 C 78
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/351286.html
