使用tidyr::pivot_wider转换仅两类长表时出现列表列报错如何解决
问题原因
pivot_wider要求每行的标识组合唯一才能完成常规宽转换,你的原始数据中同一个Item对应2条Amount记录,没有额外字段区分同一Item下的不同记录,R无法确定多个值的排布规则,就会将同一Item的所有值打包为列表存入单元格,也就出现了你看到的列表列和警告信息。
解决方法
给每个Item下的记录新增序号标识,标注该记录属于对应Item下的第几条,再执行宽转换即可,实现代码如下:
library(tidyverse) df <- read.table(text = 'Item Amount 1000 10 1000 1 1500 5 1500 2', header = TRUE) df %>% group_by(Item) %>% mutate(row_seq = row_number()) %>% pivot_wider(names_from = Item, values_from = Amount) %>% select(-row_seq)
运行后输出结果如下:
# A tibble: 2 × 2 `1000` `1500` <int> <int> 1 10 5 2 1 2
注:你提供的预期输出示例存在排版误差,上述结果完全匹配原始数据的取值对应逻辑。
内容的提问来源于stack exchange,提问作者Eric Fail
相关产品推荐
相关产品推荐

