我有一個字串:
a = c("112 271 [X];313 179 [X];125 162;123 131 [X];124 107")
我想先用分號分割;
b = as.list(strsplit(a, ";")[[1]])
> b
[[1]]
[1] "112 271 [X]"
[[2]]
[1] "313 179 [X]"
[[3]]
[1] "125 162"
[[4]]
[1] "123 131 [X]"
[[5]]
[1] "124 107"
然后我想按 拆分b,space并將結果保存為 3 列資料框。
結果看起來像:
A B C
1 112 271 [X]
2 313 179 [X]
3 125 162
4 123 131 [X]
5 124 107
我不知道該怎么做。謝謝你的幫助。
uj5u.com熱心網友回復:
用換行符替換分號,然后用填充替換 fread,并設定列名:
data.table::fread(gsub(";", "\n", a, fixed = TRUE),
fill = TRUE,
col.names = LETTERS[1:3])
# A B C
# 1: 112 271 [X]
# 2: 313 179 [X]
# 3: 125 162
# 4: 123 131 [X]
# 5: 124 107
uj5u.com熱心網友回復:
使用的基本 R 選項read.table(類似于@zx8754 的data.table解決方案)
> read.table(text = gsub(";", "\n", a), fill = TRUE, col.names = head(LETTERS, 3))
A B C
1 112 271 [X]
2 313 179 [X]
3 125 162
4 123 131 [X]
5 124 107
uj5u.com熱心網友回復:
一個tidyverse解決方案;這兩個功能separate和separate_rows來自tidyr(這是的一部分tidyverse):
library(tidyr)
data.frame(a) %>%
separate_rows(a, sep = ";") %>%
separate(a,
into = c("A","B","C"),
sep = "\\s")
# A tibble: 5 × 3
A B C
<chr> <chr> <chr>
1 112 271 [X]
2 313 179 [X]
3 125 162 NA
4 123 131 [X]
5 124 107 NA
uj5u.com熱心網友回復:
您也可以使用 來做到這一點stringr::str_split()。在下面的示例中,我使用兩個連續呼叫str_split()和簡化的輸出來創建一個字符矩陣,然后可以將其轉換為資料框。
## Question data --------------------------------------------------
a <- c("112 271 [X];313 179 [X];125 162;123 131 [X];124 107")
require(stringr)
#> Loading required package: stringr
## Split into character matrix ------------------------------------
str_split(a, ";", simplify = TRUE) |>
str_split("[:space:]", simplify = TRUE) |>
## convert to data frame ----------------------------------------
as.data.frame() |>
setNames(c("A", "B", "C"))
#> A B C
#> 1 112 271 [X]
#> 2 313 179 [X]
#> 3 125 162
#> 4 123 131 [X]
#> 5 124 107
創建于 2022-11-16,使用reprex v2.0.2
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/534802.html
標籤:r细绳数据框分裂数据表
上一篇:從另一個資料框填充一個資料框的值
