结合pivot_longer与pivot_wider清理数据框NaN值报错如何解决
问题原因
使用pivot_wider转换宽表时,需要同时明确每个值对应的行坐标和列坐标才能完成映射。你现有代码处理后的数据仅保留了列标识name和数值value,缺少行标识信息,tidyr无法判断同一个name下的多个值应该分配到哪一行,因此只能将同组值合并为列表列,抛出对应警告。
解决方法
在转宽表前,给每个字段分组下的非空值生成行号作为行标识即可,完整实现代码如下:
library(tidyr) library(dplyr) df %>% pivot_longer(c(Data1, Data2, Data3)) %>% filter(!is.na(value)) %>% # 按字段分组,给组内非空值生成顺序行号作为行坐标 group_by(name) %>% mutate(row_id = row_number()) %>% ungroup() %>% pivot_wider( names_from = name, values_from = value ) %>% # 移除辅助用的行号列 select(-row_id)
运行上述代码即可得到你期望的无NaN值的规整数据框。
内容的提问来源于stack exchange,提问作者Chris Ruehlemann
相关产品推荐
相关产品推荐

