为何pivot_wider()输出会将5个数值嵌套为列表列并返回警告
问题原因
tidyr::pivot_wider() 转换宽格式时,要求用于确定输出行的标识组合必须唯一对应1个待展开的值。你当前的输入数据中,name 列的 AL、PD 类别各自对应5个 intrcpt 值,调用函数时你只指定了第一列为行索引,但所有行的第一列没有区分度,导致函数无法将多个值匹配到不同行,只能将同一类别的所有值封装为列表列返回,同时触发重复值警告。
解决方案
如果需要得到非列表格式的宽表,可以先给每个 name 分组内的观测添加序号作为行标识,再执行宽表转换,示例代码如下:
library(tidyverse) m=" intrcpt name 1 0.0303 AL 2 0.0511 PD 3 -0.269 AL 4 -0.126 PD 5 0.195 AL 6 0.0647 PD 7 0.00690 AL 8 -0.0471 PD 9 0.0375 AL 10 0.0571 PD " dat <- read.table(text = m,h=T) dat %>% group_by(name) %>% mutate(row_id = row_number()) %>% ungroup() %>% pivot_wider(id_cols = row_id, values_from = intrcpt, names_from = name)
运行后输出的就是普通的数值型宽表,不会再出现列表列和警告。
内容的提问来源于stack exchange,提问作者Reza
相关产品推荐
相关产品推荐

