首页 > 解决方案 > R基于行名传播数据框

问题描述

我有一个包含两列的数据框。行名称被复制为具有一些公共字段的报告列表中的数据圆顶。每个报告包含不同数量的字段。我想根据这些重复的行名之一将此数据框传播到多个列中。最终结果将使每个报告连续。

这些报告来自工作系统中存在的 API。它返回一个非常嵌套的 JSON。我想看看以这种格式获取数据是否会为我提供一种清理数据的方法。

数据的最小示例

Column1       Column2
contentID      123
value1         California
value2         truck
value3         home
contentID      897
value1         Georgia
value2         car
value3         work
value4         boeing   
contentID      537
value2         truck
value4         private
value5         first class
value6         wheels

期望的结果

ContentID   value1     value2 value3 value4   value5      value6
123         California truck  home   NA       NA          NA
897         Georgia    car    work   boeing   NA          NA  
537         NA         truck  NA     private  firstclass  wheels

标签: rdplyrtidyrspread

解决方案


一种tidyverse可能是:

df %>%
 mutate(id = cumsum(grepl("content", Column1))) %>%
 group_by(id) %>%
 mutate(ContentID = first(Column2)) %>%
 filter(!grepl("content", Column1)) %>%
 ungroup() %>%
 select(-id) %>%
 spread(Column1, Column2)

  ContentID value1     value2 value3 value4  value5      value6
  <chr>     <chr>      <chr>  <chr>  <chr>   <chr>       <chr> 
1 123       California truck  home   <NA>    <NA>        <NA>  
2 537       <NA>       truck  <NA>   private first_class wheels
3 897       Georgia    car    work   boeing  <NA>        <NA>  

在这里,它首先根据content“Column1”中的出现创建一个 ID 变量并按它进行分组。其次,它使用每组“Column2”上第一行的值创建一个“ContentID”变量。第三,它过滤掉包含content在“Column1”中的行。最后,它传播数据。


推荐阅读