簡體   English   中英

通過分隔符將列文本拆分為 R 中的多個不同列

[英]Splitting column text by delimiter into multiple different columns in R

我有以下問題。 我必須將下面的文本分成單獨的列。 數據是通過web抓取提取的,我需要對其進行轉換分析。 例如,我復制了一行,我只需要 "id":357 和 "slug":"journalism/audio" 作為信息。 你知道如何在 R 中轉換它嗎? 下面的代碼來自 df 列:

{"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"}}}

我要轉換的數據的屏幕截圖示例表

從這樣的字符串開始

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"

首先用逗號將字符串strsplit成塊並刪除引號

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"

最后構建 dataframe

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

數據

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"

離開你在這里提供的一行數據,也許是這樣的?

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM