R 删除具有特定值的一组变量中观察值的随机子集
让我们假设我有一个数据框,在这个数据框中,我想删除满足某个标准的随机观察样本(意思是整行)。以这个数据帧为例:R 删除具有特定值的一组变量中观察值的随机子集,r,R,让我们假设我有一个数据框,在这个数据框中,我想删除满足某个标准的随机观察样本(意思是整行)。以这个数据帧为例: id var1 var2 AAAA 1 Car BBBB 2 Truck CCCC 1 Boat DDDD 2 Car EEEE 1 Truck FFFF 2 Car FFFF 2 Car FFFF 2 Car FFFF 2 Car (1)在var2==“Car”的位置随机抽取(n=3)
id var1 var2
AAAA 1 Car
BBBB 2 Truck
CCCC 1 Boat
DDDD 2 Car
EEEE 1 Truck
FFFF 2 Car
FFFF 2 Car
FFFF 2 Car
FFFF 2 Car
(1)在
var2==“Car”
的位置随机抽取(n=3)个观察值,以及(2)删除var2==“Car”
的所有其他行,这些行没有被取样,我们该怎么做?在某个标准(即“var2=Car”)内使用sample()
时遇到问题,因为它还从数据集中删除了所有其他观察值(当我想用Trucks
和Boats
保留其他行时)(carindex这里是一种使用数据的方法。table
.I
是一个包含特定子集行号的向量。(请参见?data.table
)
库(data.table)
#假设您的data.frame名为df
DT关于您在使用sample
时遇到的困难,可能与您的采样来源有关
您不希望直接从data.frame中采样,因为这样会对列进行采样
您不希望从逻辑向量中采样,因为使用结果进一步索引data.frame并不简单
相反,您希望从索引到行进行采样。您可以从适当的索引子集进行采样,然后与第二个子集合并,但这很麻烦
更直接的方法是对您将要取出的内容进行采样:
在哪里,DT sample()命令会有帮助吗?我发现一个棘手的部分是,在某个标准(即“var2=Car”)内进行采样也会从数据集中删除所有其他观察值——我想用卡车
和船只
保留其他行。
(carindex <- which(dat$var2 == 'Car'))
(deleteindex <- sample(carindex, length(carindex) - 3))
dat[-deleteindex, ]
R > (carindex <- which(dat$var2 == 'Car'))
[1] 1 4 6 7 8 9
R > (deleteindex <- sample(carindex, length(carindex) - 3))
[1] 4 6 9
R > dat[-deleteindex, ]
id var1 var2
1 AAAA 1 Car
2 BBBB 2 Truck
3 CCCC 1 Boat
5 EEEE 1 Truck
7 FFFF 2 Car
8 FFFF 2 Car
library(data.table)
# assuming your data.frame is called df
DT <- data.table(df)
DT[DT[, list(keep = if(var2 =='Car'){
.I[sample(.N, 3)]
} else{.I}) , by = var2]$keep]
id var1 var2
1: DDDD 2 Car
2: FFFF 2 Car
3: AAAA 1 Car
4: BBBB 2 Truck
5: EEEE 1 Truck
6: CCCC 1 Boat
# remove 3 random rows where var2 is "car":
DT[-sample(which(var2=="Car"), 3)]
# id var1 var2
# 1: BBBB 2 Truck
# 2: CCCC 1 Boat
# 3: DDDD 2 Car
# 4: EEEE 1 Truck
# 5: FFFF 2 Car
# 6: FFFF 2 Car