我有以下数据框:
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
任何帮助都将不胜感激。
答案 0 :(得分:7)
您可以使用sample()
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