首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用分隔符将列文本分割成R中的多个不同的列

用分隔符将列文本分割成R中的多个不同的列
EN

Stack Overflow用户
提问于 2021-12-13 16:22:13
回答 2查看 48关注 0票数 0

我有以下问题。我必须把下面的文字分成几列。这些数据是通过web抓取来提取的,我需要对其进行转换以进行分析。举个例子,我复制了一行,其中我只需要"id":357和“片段”:“新闻/音频”作为信息。你知道我如何在R中变换它吗?下面的代码来自df列:

代码语言:javascript
运行
复制
{"id":357,"name":"Audio","analytics_name":"Audio","slug":"journalism/audio","position":1,"parent_id":13,"parent_name":"Journalism","color":1228010,"urls":{"web":{"discover":"http://www.kickstarter.com/discover/categories/journalism/audio"}}}

要转换的数据的屏幕截图示例表

EN

回答 2

Stack Overflow用户

发布于 2021-12-13 16:40:10

从这样的字符串开始

代码语言:javascript
运行
复制
stri
[1] "\"id\":357,\"name\":\"Audio\",\"analytics_name\":\"Audio\",\"slug\":\"journalism/audio\",\"position\":1,\"parent_id\":13,\"parent_name\":\"Journalism\",\"color\":1228010,\"urls\":{\"web\":{\"discover\":\"http://www.kickstarter.com/discover/categories/journalism/audio"

首先,用逗号将字符串分成块,然后删除引号。

代码语言:javascript
运行
复制
d <- gsub( "\"","", strsplit(stri, ",")[[1]] )
[1] "id:357"
[2] "name:Audio"
[3] "analytics_name:Audio"
[4] "slug:journalism/audio"
[5] "position:1"
[6] "parent_id:13"
[7] "parent_name:Journalism"
[8] "color:1228010"
[9] "urls:{web:{discover:http://www.kickstarter.com/discover/categories/journalism/audio"

最后构建数据帧

代码语言:javascript
运行
复制
dat <- data.frame( strsplit( d[grep("^id|^slug",d)], ":" ) )[2,]

colnames( dat ) <- data.frame( strsplit( d[grep("^id|^slug",d)], ":" ) )[1,]
dat
   id             slug
2 357 journalism/audio

数据

代码语言:javascript
运行
复制
stri <- "\"id\":357,\"name\":\"Audio\",\"analytics_name\":\"Audio\",\"slug\":\"journalism/audio\",\"position\":1,\"parent_id\":13,\"parent_name\":\"Journalism\",\"color\":1228010,\"urls\":{\"web\":{\"discover\":\"http://www.kickstarter.com/discover/categories/journalism/audio"
票数 1
EN

Stack Overflow用户

发布于 2021-12-13 16:40:13

从您在这里提供的一行数据出发,可能是这样吗?

代码语言:javascript
运行
复制
library(magrittr)
library(stringr)
library(tidyr)
library(dplyr)

#Toy data.
df <- data.frame(category = '{"id":357,"name":"Audio","analytics_name":"Audio","slug":"journalism/audio","position":1,"parent_id":13,"parent_name":"Journalism","color":1228010,"urls":{"web":{"discover":"http://www.kickstarter.com/discover/categories/journalism/audio"}}}')
df[2, ] <- df[1, ] 


df %>% 
  mutate(ucol = row_number()) %>%
  separate_rows(category, sep = ",") %>% 
  mutate(category = str_replace_all(category, '[\\"\\{\\}]', "")) %>% 
  filter(str_detect(category, "^id|^slug")) %>%
  separate(category, sep = ":", into = c("key", "val")) %>%
  pivot_wider(names_from = key, values_from = val)

# # A tibble: 2 × 3
#    ucol id    slug            
#   <int> <chr> <chr>           
# 1     1 357   journalism/audio
# 2     2 357   journalism/audio
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70337778

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档