如何将非数值列转数值?基于data.table的PhD数据分析求助
解决data.table中非数值dummy列转数值类型的问题
核心解决方案
针对你的MC2_dummy和MC3_dummy列(字符型的"0"/"1"),使用data.table的原地修改语法直接转换:
# 单列逐一转换 dt[, MC2_dummy := as.integer(MC2_dummy)] dt[, MC3_dummy := as.integer(MC3_dummy)] # 批量转换(适合多dummy列场景) dummy_cols <- grep("dummy", names(dt), value = TRUE) dt[, (dummy_cols) := lapply(.SD, as.integer), .SDcols = dummy_cols]
转换后验证类型:
typeof(dt$MC2_dummy) # 输出应为"integer" typeof(dt$MC3_dummy)
你之前尝试方法的错误原因
dt = as.numeric(unlist(datatable)):
该操作把整个data.table拆解为向量,会将MC2/MC3这类非数值字符列强制转换,导致大量NA,同时彻底丢失data.table的结构,完全偏离需求。cor(dt[sapply(dt$MC2_dummy, dt$PPU1, is.numeric)]):sapply的语法错误,第二个参数必须是函数,你传入了dt$PPU1(一个向量),因此触发报错。若要筛选数值列计算相关系数,正确写法应为:cor(dt[, sapply(dt, is.numeric), with = FALSE])dt = as.numeric(datatable):
data.table本质是列表结构,无法直接整体转换为数值类型,因此报错。
内容的提问来源于stack exchange,提问作者Valério Souza Neto
相关产品推荐
相关产品推荐

