如何用dplyr将R中含滞后数值的逻辑列转换为数值列?
问题解决:Excel导入后逻辑列转数值全为1的修复
问题原因
导入Excel时,由于前3000行均为NA,read_excel的自动类型推断将A/B/C列识别为逻辑型,后续行的数值被错误解析为逻辑值TRUE;使用as.numeric()转换时,TRUE会被转为1,最终导致结果全为1。
解决方案
方案1:导入阶段指定列类型(推荐)
在导入Excel时直接指定列类型,从根源避免类型推断错误:
library(readxl) # 替换为你的文件路径,col_types顺序需与Excel列顺序匹配 data <- read_excel("your_file.xlsx", col_types = c("date", "numeric", "numeric", "numeric"))
方案2:已导入数据的修复
若已完成导入,通过「逻辑→字符→数值」的转换链还原原始数值:
library(dplyr) library(tidyr) data_fixed <- data %>% mutate(date = as.Date(Dates)) %>% select(-Dates) %>% relocate(date, .before = "A") %>% # 先转字符保留原始内容,再转数值 mutate(across(c(A, B, C), ~ as.numeric(as.character(.x)))) %>% pivot_longer(!date, names_to = "var", values_to = "y") %>% group_by(var) %>% arrange(var) %>% drop_na()
验证
执行上述代码后,查看data_fixed的y列,即可得到正确的原始数值,而非全1的结果。
内容的提问来源于stack exchange,提问作者Homer Jay Simpson
相关产品推荐
相关产品推荐

