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

在R data.table中随机选取50列却仅得50行,如何解决?

解决data.table随机选取列的问题

问题根源

sample_n()是dplyr包中专门用于随机抽取行的函数,它根本没有axis参数——你添加的这个参数会被直接忽略,所以代码实际执行的是随机抽取50行,这就是结果只有50行的原因。

正确解决方案

方法1:data.table原生语法(推荐,效率更高)

利用data.table的列索引特性,先随机生成要保留的列的索引或列名,再完成筛选:

# 方式1:通过列索引随机选50列
rand_col_indices <- sample(ncol(ogTable), 50)
randomTable <- ogTable[, ..rand_col_indices]

# 方式2:通过列名随机选50列
rand_col_names <- sample(colnames(ogTable), 50)
randomTable <- ogTable[, rand_col_names, with = FALSE]
  • 解释:..是data.table的语法,用于引用全局环境中的列索引向量;with = FALSE用于告诉data.table直接将字符向量作为列名处理(新版本data.table可省略,但保留更兼容)。

方法2:结合dplyr语法(若习惯tidyverse风格)

用select()函数搭配sample()来随机选择列:

library(dplyr)
# 通过列数随机选50列
randomTable <- ogTable %>% select(sample(ncol(.), 50))

# 或者通过列名随机选50列
randomTable <- ogTable %>% select(sample(colnames(.), 50))

注意事项

如果原数据表存在重复列名,若想避免重复抽取同一列,确保sample()的replace参数为FALSE(这是sample()的默认设置,无需额外修改)。

内容的提问来源于stack exchange,提问作者Feynman

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 02:33:18