在Kaggle中使用R的pivot_longer函数,数据后半段出现NA值问题
宽转长后数据后半段缺失(含NA和“exported on...”字样)的解决方法
问题描述
原始数据框(附截图),使用pivot_longer进行宽转长操作,代码如下:
# 将数据框从宽格式转换为长格式 us_population_v3 <- pivot_longer(us_population_v2, cols = !1, names_to = "year", values_to = "total_population") View(us_population_v3)
转换后生成的新数据框前半段数据正常,但后半段数据缺失,显示为NA且带有‘exported on...’字样。
原因分析及解决步骤
1. 原始数据混入非数据行
这是最可能的原因:你的原始数据框us_population_v2后半段存在导出时自动添加的注释行(比如带“exported on...”的行),这些行在宽格式下被当成了数据行,但实际是文本内容,转长格式时无法识别为数值,直接变成NA。
- 解决办法:先清理原始数据,删掉包含“exported on...”的行。示例代码(假设第一列是类似
state的标识列):
library(dplyr) # 过滤掉包含特定注释文本的行 us_population_v2_cleaned <- us_population_v2 %>% filter(!grepl("exported on", state)) # 把state替换成你实际的第一列名称
2. 列选择方式的潜在问题
用cols = !1指代除第一列外的所有列,看似没问题,但如果原始数据存在隐藏列或非年份列,可能会误转换无关列,导致异常。
- 解决办法:明确指定要转换的年份列,比如年份列都是20开头的数字:
us_population_v3 <- pivot_longer(us_population_v2_cleaned, cols = starts_with("20"), # 匹配20开头的年份列 names_to = "year", values_to = "total_population")
3. 数据类型不统一
如果原始数据中部分年份列因为混入文本变成了字符类型,转长后数值会被强制转为NA。
- 解决办法:清理后统一转换年份列的数据类型为数值型:
us_population_v2_cleaned <- us_population_v2_cleaned %>% mutate(across(starts_with("20"), as.numeric))
内容的提问来源于stack exchange,提问作者Taylor Wilson
相关产品推荐
相关产品推荐

