来自R中数据帧的随机样本

时间:2016-05-04 04:42:23

标签: r

我有以下数据框:

 image.getImage(); // it returns null

现在我想提取一个随机的id样本,而不是行。事实上,我正在寻找一种方法来随机选择两个ID并提取与它们相关的所有记录。例如,如果它随机选择ID 2和3,则输出数据框应如下所示:

id<-c(1,1,2,3,3)
date<-c("23-01-08","01-11-07","30-11-07","17-12-07","12-12-08")
df<-data.frame(id,date)
df$date2<-as.Date(as.character(df$date), format = "%d-%m-%y")

id     date      date2
1   23-01-08 2008-01-23
1   01-11-07 2007-11-01
2   30-11-07 2007-11-30
3   17-12-07 2007-12-17
3   12-12-08 2008-12-12

任何帮助都将不胜感激。

5 个答案:

答案 0 :(得分:7)

您可以使用sample()

随机选择两个ID
chosen <- sample(unique(df$id), 2)

然后提取那些记录

subset(df, id %in% chosen)

答案 1 :(得分:1)

首先,你必须生成样本索引:

s_ids=sample(unique(df$id),2)

现在您已经在df中选择了正确的记录

new_df=df$[df$id %in% s_ids,]

答案 2 :(得分:1)

您可以使用sample功能。

set.seed(2)
df[match(sample(unique(df$id),2),df$id),]

sample()函数将生成随机索引,然后您可以将它们匹配回df数据框行并获取其余数据。 有关详细信息,请查看?sample

答案 3 :(得分:1)

或使用dplyr

library(dplyr)
df %>% 
    filter(id %in% sample(unique(id),2))
#  id     date      date2
#1  2 30-11-07 2007-11-30
#2  3 17-12-07 2007-12-17
#3  3 12-12-08 2008-12-12

或者

df %>%
     select(id) %>%
     unique() %>%
     sample_n(2) %>%
     semi_join(df, .)
#  id     date      date2
#1  1 23-01-08 2008-01-23
#2  1 01-11-07 2007-11-01
#3  2 30-11-07 2007-11-30

答案 4 :(得分:0)

使用sqldf:

library(sqldf)
a <- sqldf("SELECT DISTINCT id FROM df  ORDER BY RANDOM(*) LIMIT 2")
sqldf("SELECT * FROM df WHERE id IN a")

输出继电器:

  id     date      date2
1  1 23-01-08 2008-01-23
2  1 01-11-07 2007-11-01
3  3 17-12-07 2007-12-17
4  3 12-12-08 2008-12-12