首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R解析具有JSON数组的dataframe列,并转换为one-hot编码

R解析具有JSON数组的dataframe列,并转换为one-hot编码
EN

Stack Overflow用户
提问于 2020-12-08 11:03:20
回答 2查看 33关注 0票数 2

我有一个dataframe,它的列具有字符串形式的JSON数组。我的目标是解析列并将其转换为one-hot编码,但在解析JSON时遇到错误。

代码语言:javascript
复制
library(jsonlite)
> df <- data_frame(Amenities=c("[\"Parking\", \"Lawn\", \"Garage\", \"Frontyard\"]", "[\"Parking\", \"Lawn\", \"Garage\", \"Backyard\"]", "[\"Parking\", \"Lawn\", \"Garage\"]"))
> df
# A tibble: 3 x 1
  Amenities                                           
  <chr>                                               
1 "[\"Parking\", \"Lawn\", \"Garage\", \"Frontyard\"]"
2 "[\"Parking\", \"Lawn\", \"Garage\", \"Backyard\"]" 
3 "[\"Parking\", \"Lawn\", \"Garage\"]"               
> df <- df %>% mutate(Amenities=fromJSON(Amenities))
Error: parse error: trailing garbage
          awn", "Garage", "Frontyard"] ["Parking", "Lawn", "Garage", "
                     (right here) ------^
> 

预期输出:

代码语言:javascript
复制
Parking  Lawn  Garage  Frontyard  Backyard
      1     1       1          1         0
      1     1       1          0         1
      1     1       1          0         0

解决方案:同时保留现有的数据帧。

代码语言:javascript
复制
library(qdapTools)
df <- cbind(df, +(mtabulate(str_extract_all(df$amenities, "\\w+( +\\w+)*"))))
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-12-09 05:13:08

我们可以使用mtabulate在一行代码中完成这项工作

代码语言:javascript
复制
library(qdapTools)
library(stringr)
mtabulate(str_extract_all(df$Amenities, "\\w+"))

-output

代码语言:javascript
复制
#  Backyard Frontyard Garage Lawn Parking
#1        0         1      1    1       1
#2        1         0      1    1       1
#3        0         0      1    1       1
票数 1
EN

Stack Overflow用户

发布于 2020-12-08 11:08:53

您可以将json视为字符串,清理它们并展开dataset。

代码语言:javascript
复制
library(dplyr)

df %>%
  mutate(Amenities = gsub('\\[|\\]|"', '', Amenities)) %>%
  splitstackshape::cSplit_e("Amenities", sep = ',\\s*', 
                            type = 'character', fill = 0, fixed = FALSE) %>%
  rename_with(~sub('Amenities_', '', .))

#                         Amenities Backyard Frontyard Garage Lawn Parking
#1 Parking, Lawn, Garage, Frontyard        0         1      1    1       1
#2  Parking, Lawn, Garage, Backyard        1         0      1    1       1
#3            Parking, Lawn, Garage        0         0      1    1       1
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65192502

复制
相关文章

相似问题

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