You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将非数值列转数值?基于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)

你之前尝试方法的错误原因

  1. dt = as.numeric(unlist(datatable)):
    该操作把整个data.table拆解为向量,会将MC2/MC3这类非数值字符列强制转换,导致大量NA,同时彻底丢失data.table的结构,完全偏离需求。

  2. cor(dt[sapply(dt$MC2_dummy, dt$PPU1, is.numeric)]):
    sapply的语法错误,第二个参数必须是函数,你传入了dt$PPU1(一个向量),因此触发报错。若要筛选数值列计算相关系数,正确写法应为:

    cor(dt[, sapply(dt, is.numeric), with = FALSE])
    
  3. dt = as.numeric(datatable):
    data.table本质是列表结构,无法直接整体转换为数值类型,因此报错。

内容的提问来源于stack exchange,提问作者Valério Souza Neto

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 15:26:07