提问人:silent_hunter 提问时间:10/10/2023 更新时间:10/10/2023 访问量:56
在 R 中拆分数据框中的特定列
Split specific column in data frame in R
问:
我正在使用 R。 下面你可以看到我的代码和我的数据:
df <- data.frame(
R1 = c("10 EFTA : 0 / BAA/GBR : 0 / ES : 2", "10","0"),
R2 = c("-", "EFTA : 0 / BAA/GBR : 0 / ES : 2","18")
)
现在我想拆分第一列 R1。一开始,我想用以下命令拆分第一行:
df[c('R1', 'R2')] <- str_split_fixed(df$R1, ' ', 2)
这一行正好是我需要的第一行,下面你可以看到它现在看起来像一个数据框。
但是下一行出现了问题。也就是说,现在您可以看到此值以及下一行中的值丢失。
所以任何人都可以帮助我如何解决这个问题,并让 df 像 df 一样如下所示:"EFTA : 0 / BAA/GBR : 0 / ES : 2"
18
答:
1赞
dufei
10/10/2023
#1
您的算法何时选择定义不是很好但基于您想要的输出,例如以下代码的内容可能会起作用?
library(tidyverse)
df <- tibble(
R1 = c("10 EFTA : 0 / BAA/GBR : 0 / ES : 2", "10","0"),
R2 = c("-", "EFTA : 0 / BAA/GBR : 0 / ES : 2","18")
)
df |>
separate_wider_regex(
R1,
patterns = c(digits = "^\\d+", "(?:\\s+)?", rest = ".*")
) |>
mutate(rest = if_else(rest == "", R2, rest),
.keep = "unused")
#> # A tibble: 3 × 2
#> digits rest
#> <chr> <chr>
#> 1 10 EFTA : 0 / BAA/GBR : 0 / ES : 2
#> 2 10 EFTA : 0 / BAA/GBR : 0 / ES : 2
#> 3 0 18
创建于 2023-10-09 使用 reprex v2.0.2
1赞
margusl
10/10/2023
#2
您可以先找到匹配的行,然后只处理这些匹配项:
library(stringr)
df <- data.frame(
R1 = c("10 EFTA : 0 / BAA/GBR : 0 / ES : 2", "10","0"),
R2 = c("-", "EFTA : 0 / BAA/GBR : 0 / ES : 2","18")
)
df
#> R1 R2
#> 1 10 EFTA : 0 / BAA/GBR : 0 / ES : 2 -
#> 2 10 EFTA : 0 / BAA/GBR : 0 / ES : 2
#> 3 0 18
# boolean index to match rows where R1 includes " ":
spaces_in_r1 <- str_detect(df$R1, fixed(" "))
spaces_in_r1
#> [1] TRUE FALSE FALSE
df[spaces_in_r1 ,c('R1', 'R2')] <- str_split_fixed(df$R1[spaces_in_r1], ' ', 2)
df
#> R1 R2
#> 1 10 EFTA : 0 / BAA/GBR : 0 / ES : 2
#> 2 10 EFTA : 0 / BAA/GBR : 0 / ES : 2
#> 3 0 18
创建于 2023-10-09 使用 reprex v2.0.2
上一个:在 R 中替换数据框中的特定值
评论