我有一个大的数据表格(约24000行且不断增长)。 我想基于一些标准对该数据表格进行子集,从该子集(最终仅约3000行)中,我希望随机抽取4行。 我不想创建一个带有3000个或更多行的命名数据表格,计算其行数,然后基于行号进行抽样。 我应该如何即时处理它?还是说我应该接受创建数据表格并在其上操作、抽样,然后使用 rm()
来清除它?
让我们模拟我的问题
require(data.table)
random.length <- sample(x = 15:30, size = 1)
data.table(city=sample(c("Cape Town", "New York", "Pittsburgh", "Tel Aviv", "Amsterdam"), size=random.length, replace = TRUE), score = sample(x=1:10, size = random.length, replace=TRUE))
这将生成一个随机长度的表格,模拟了根据我的标准和起始表格,我不知道子集表格的长度会是多少的事实。
现在,如果我只想要前三行,我可以这样做
data.table(city=sample(c("Cape Town", "New York", "Pittsburgh", "Tel Aviv", "Amsterdam"), size=random.length, replace = TRUE), score = sample(x=1:10, size = random.length, replace=TRUE))[1:3]
但是假设我不想要前三行,而是想要随机选取三行,那么我会这样做...
data.table(city=sample(c("Cape Town", "New York", "Pittsburgh", "Tel Aviv", "Amsterdam"), size=random.length, replace = TRUE), score = sample(x=1:10, size = random.length, replace=TRUE))[sample(x= 1:number of rows of that previous data.table,size = 3 ]
那样做行不通。我该如何动态计算初始数据框的长度?
install_github("data.table", "Rdatatable", build_vignettes=F)
- FarrelDT[sample(.N,3)]
? - Ufossample(.N,3)
已经进行了无重复抽样。要进行有重复的抽样,请使用sample(.N,3,replace=TRUE)
。请参阅?sample
。 - Matt Dowle