【问题标题】:how to find the complement of a random selection of rows of a dataframe? [duplicate]如何找到随机选择的数据帧行的补码? [复制]
【发布时间】:2026-02-23 01:55:01
【问题描述】:

我有一个名为 data 的数据集,我将其拆分为 2 个新数据集,分别称为 testtrain

我希望拆分是随机的,没有替换。

使用下面的代码,我得到 train 是一个包含 35 个元素的新数据框:

rows_in_test <-  35  # number of rows to randomly select 
rows_in_train <- nrow(data) - rows_in_test 
train <- data[sample(nrow(data), rows_in_test), ] 

R 中是否有一种很好的方法可以将train 的补码分配给一个名为test 的新数据集?我在想一定有这个功能?

【问题讨论】:

    标签: r rows


    【解决方案1】:
    myData<-data.frame(a=c(1:20), b=c(101:120))
    set.seed(123)#to be able to replicate random sampling later
    trainRows<-runif(nrow(myData))>0.25 #randomly put aside 25% of the data
    train<-myData[trainRows,]#has 13 rows
    test<-myData[!trainRows,]#has 7 rows
    
    #following method to select a fixed no. of samples - in this case selecting 5 rows
    testRows2<-sort(sample(c(1:nrow(myData)), 5, replace=F))
    
    train2<-myData[-testRows2, ]
    test2<-myData[testRows2, ]
    

    【讨论】:

    • 似乎是一致性问题...我得到 4 个 obs 测试和 16 个训练...
    • 我在发帖后添加了关于设置种子的行。我也得到了 16 行火车。只要在调用runif 之前设置种子,您就应该得到一致的结果。