r - 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
解决方案
一种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”中的行。最后,它传播数据。
推荐阅读
- rust - 如何传递已实现特定特征的结构实例?
- sql-server - 如何禁用 sp_helptext
- angular - 以角度路由到特定路由时如何删除查询参数?
- powershell - PowerShell Get-WmiObject:内存不足错误?
- sql - 如何在不同视图(Crystal Reports)的列中选择参数值存在的不同记录?
- ruby-on-rails - 如何摆脱登录页面中的默认 Spree 面板?
- python - 是什么导致 Pandas 中出现“索引过去的 lexsort 深度”警告?
- magento - OneSignal 的网络推送没有声音警报
- c# - 使用 OPCDA 列出所有标签和组
- c# - 在 bot 框架对话框和 formFlow 中实施建议的操作