在R中基于随机生成的数值集合筛选数据框列是否可行?
问题解答
- 可行是可行,但这种手动复制粘贴的做法完全没必要,还容易出问题。
- 直接说结论:把生成的随机数手动粘到
c()里,R确实能按这些索引筛选数据框的列,但这么做有三个明显的问题:- 太麻烦:1000个数字手动复制粘贴,费时间还容易漏粘、多粘或者格式出错。
- 没法复现:这次生成的随机数是临时的,下次跑代码想得到一样的筛选结果,只能靠存下这堆数字,完全是冗余操作。
- 代码太乱:一堆数字堆在代码里,可读性极差,后期维护也麻烦。
更简洁高效的做法
直接把随机数存成变量,用变量来筛选,一行搞定:
# 生成1到20000之间的1000个随机列索引(注意你原代码写的是2000个,这里按你需求调整为1000个) random_cols <- sample.int(20000, 1000, replace = TRUE) # 用变量筛选数据框的列 df_sub <- df[, random_cols]
如果需要每次运行都得到一模一样的筛选结果,加个随机种子就行:
set.seed(123) # 种子值随便设,固定后每次生成的随机数完全一致 random_cols <- sample.int(20000, 1000, replace = TRUE) df_sub <- df[, random_cols]
额外提醒
- 要是你非要用复制粘贴的方式,得保证粘进去的数字符合R语法:每个数字之间用逗号隔开,别加多余的符号或者换行错误。
- 另外,
replace = TRUE会允许重复选同一列,要是你不想重复选列,把这个参数改成replace = FALSE就行(这里20000远大于1000,完全没问题)。
内容的提问来源于stack exchange,提问作者ecology
相关产品推荐
相关产品推荐

