将一个单元格拆分为R中的多列

kat*_*con 3 string r tidyverse

所以这就是我的专栏之一的样子:

资讯
姓名:安吉拉 姓:史密斯 年龄:22 城市:洛杉矶
姓名:ANDREW 姓氏:D'ONOFRIO 年龄:47 城市:纽约

我想创建四列:

姓名 年龄 城市
安吉拉 史密斯 22 洛杉矶
安德鲁 多诺弗里奥 47 纽约市

我读到我们可以从 tidyverse 使用“分离”,这就是我尝试过的。

library(tidyr)
library(tidyverse)

df <- infos %>% separate(Infos, c("NAME", "SURNAME","AGE","CITY"))

Run Code Online (Sandbox Code Playgroud)

但这是输出:

姓名 年龄 城市
姓名 安吉拉 史密斯
姓名 安德鲁 多诺弗里奥

然后我想了解如何让 R 知道它必须分开什么。也许这个确切的主题之前已经在这里处理过(但我没有找到它)所以如有必要,请随时重定向我!

G. *_*eck 6

1) 提取使用显示模式的提取。测试数据的字段内容中没有任何空格,但即使这样做也应该有效。

library(dplyr)
library(tidyr)

pat <- "NAME: *(.*) SURNAME: *(.*) AGE: *(.*) CITY: *(.*)"
dat %>% 
  extract(Infos, c("NAME", "SURNAME", "AGE", "CITY"), pat, convert = TRUE)
##     NAME   SURNAME AGE CITY
## 1 ANGELA     SMITH  22   LA
## 2 ANDREW D'ONOFRIO  47  NYC
Run Code Online (Sandbox Code Playgroud)

2) 基础 R或者只使用基础 R 我们得到这个通用解决方案,即使列数或其名称发生变化,它也将继续工作。如果字段内容中有空格,这也应该有效。它的工作原理是将 Infos 转换为 dcf 格式,然后是 read.dcf。

dat |>
  with(gsub("(\\w+:)", "\n\\1", Infos)) |>
  textConnection() |>
  read.dcf() |>
  as.data.frame() |>
  type.convert(as.is = TRUE)
##     NAME   SURNAME AGE CITY
## 1 ANGELA     SMITH  22   LA
## 2 ANDREW D'ONOFRIO  47  NYC
Run Code Online (Sandbox Code Playgroud)

笔记

可重现形式的数据:

dat <-
structure(list(Infos = c("NAME: ANGELA SURNAME:SMITH AGE:22 CITY: LA", 
"NAME: ANDREW SURNAME: D'ONOFRIO AGE:47 CITY: NYC")), class = "data.frame", row.names = c(NA, 
-2L))
Run Code Online (Sandbox Code Playgroud)