R语言使用pivot_wider出现Values are not uniquely identified报错如何解决
问题原因
该警告是因为你的数据集内同一个range分组下存在多个item值,pivot_wider默认缺少行对齐的标识字段,无法确定不同range下的item要如何对应行位置,因此会默认生成列表列并抛出警告。
解决代码
你需要先给每个range分组内的item生成行序号作为对齐依据,再执行宽表转换即可:
library(dplyr) library(tidyr) dt %>% # 按range分组生成组内行号,作为转宽后的行对齐标识 group_by(range) %>% mutate(row_idx = row_number()) %>% ungroup() %>% pivot_wider( names_from = range, values_from = item, # 空缺位置自动填空字符串,需要留NA的话可以改为values_fill = NA values_fill = list(item = "") ) %>% # 不需要保留行号的话可以删除该列 select(-row_idx)
效果验证
假设你的原始测试数据如下:
dt <- tibble( item = c("苹果", "香蕉", "橙子", "桌子", "椅子"), range = c("Range 1", "Range 1", "Range 1", "Range 2", "Range 2") )
运行上述代码后输出结果为:
| Range 1 | Range 2 |
|---|---|
| 苹果 | 桌子 |
| 香蕉 | 椅子 |
| 橙子 |
完全符合你要求的「行数匹配item数量更多的分组、空缺位置留空」的需求。
内容的提问来源于stack exchange,提问作者Kishore Kumar Jagadeesan
相关产品推荐
相关产品推荐

