如何批量将多列转为as.character以解决pivot_longer类型兼容报错?
解决pivot_longer类型不兼容的问题
错误原因很明确:你要转置的年份列(第3到26列)数据类型不统一,有的是字符型,有的是数值型,pivot_longer没办法把不同类型的列合并成同一列,所以报错了。
下面给你两种批量处理的方法,不用逐个列写转换代码:
方法一:先统一列类型再转置
用dplyr::across批量把目标列转成数值型,再执行宽转长:
library(dplyr) library(tidyr) # 批量转换3-26列为数值型 fisheries_df_cleaned <- fisheries_df %>% mutate(across(3:26, as.numeric)) # 执行宽转长 fisheries_longer <- fisheries_df_cleaned %>% pivot_longer(cols = 3:26, names_to = "year", values_to = "catch_value")
方法二:在pivot_longer里直接转换
用values_transform参数一步到位,指定转置后数值列的类型:
library(tidyr) fisheries_longer <- pivot_longer(fisheries_df, cols = 3:26, names_to = "year", values_to = "catch_value", values_transform = list(catch_value = as.numeric))
这个参数会在转置过程中自动把所有原年份列的内容转换成数值型,直接生成统一类型的新列,省去单独清洗的步骤。
另外也可以用values_ptypes参数指定目标列的类型,效果类似:
fisheries_longer <- pivot_longer(fisheries_df, cols = 3:26, names_to = "year", values_to = "catch_value", values_ptypes = list(catch_value = numeric()))
内容的提问来源于stack exchange,提问作者Joe
相关产品推荐
相关产品推荐

