随机抽取数据框变量的子集

5

我正在处理一个大型数据集,其中包含一周内的旅行行为数据。在一周的时间内,人们记录了他们在那周内所进行的各个旅行。每个人都有一个唯一的身份证号码(ID)。我的目标是从可用的每个唯一ID的一周数据中随机选择两天的日记数据(可能包括一个或多个旅行),并将其放入一个新的数据框中。下面是一个示例数据框:

Df1 <- data.frame(ID = c(1,1,1,1,1,1,2,2,2,2,2,2,3,3,3,3,3), 
                  date = c("1st Nov", "1st Nov", "3rd Nov", "4th Nov","4th Nov","5th Nov","2nd Nov", "2nd Nov", "3nd Nov", "4th Nov","5th Nov","5th Nov","2nd Nov", "2nd Nov", "3nd Nov", "4th Nov","5th Nov"))

以上内容如有任何帮助,将不胜感激。
非常感谢,
Katie

感谢您添加示例数据,这样回复起来就更容易了。 - Paul Hiemstra
1个回答

8
听起来需要使用plyr。为每个用户随机抽取两天进行样本采集:
library(plyr)
ddply(Df1, .(ID), function(x) {
  unique_days = as.character(unique(x$date))
  if(length(unique_days) < 2) {
    randomSelDays = unique_days
  } else {
    randomSelDays = sample(unique_days, 2)        
  }
  return(x[x$date %in% randomSelDays,])
})

这将返回每个唯一标识符所选两天的所有数据。此外,如果某个ID只有一天数据,则返回该天数据。例如:

  ID    date
1  1 1st Nov
2  1 1st Nov
3  1 3rd Nov
4  2 3nd Nov
5  2 5th Nov
6  2 5th Nov
7  3 2nd Nov
8  3 2nd Nov
9  3 3nd Nov

非常感谢您对代码的帮助 - 它几乎是正确的。 我可能没有很好地解释自己,但是我想要的是在两个特定日期留下所有旅行 - 而不仅仅是每周数据中的两次旅行(因此对于某些人可能会剩下两次旅行,而对于其他人,则可能在一天内进行了三次旅行,在另一天则进行了两次旅行)。例如,原始数据框中的“1”号人物在11月4日进行了两次旅行,因此应包含在第二个数据框中。 - KT_1
你在问题中已经解释得很清楚了,只是我没有仔细阅读 :)。 - Paul Hiemstra
我在处理数据时遇到了一个小问题 - 对于一些ID号码,我只有单日的数据 - 我该如何调整上面的代码以表示如果只有单日,则可以将其纳入新的数据子集(与每个唯一标识符的正常两个选定日期一起)?以下是代码... - KT_1
Df1 <- data.frame(ID = c(1,1,1,1,1,1,2,2,2,2,2,2,3,3,3,3,3,4,5,5), date = c("11Šťł1ŠŚą", "11Šťł1ŠŚą", "11Šťł3ŠŚą", "11Šťł4ŠŚą","11Šťł4ŠŚą","11Šťł5ŠŚą","11Šťł2ŠŚą", "11Šťł2ŠŚą", "11Šťł3ŠŚą", "11Šťł4ŠŚą","11Šťł5ŠŚą", "11Šťł5ŠŚą","11Šťł2ŠŚą", "11Šťł2ŠŚą", "11Šťł3ŠŚą", "11Šťł4ŠŚą","11Šťł5ŠŚą","11Šťł3ŠŚą","11Šťł2ŠŚą","11Šťł2ŠŚą")) - KT_1
我更新了代码,应该可以解决问题。如果你觉得这个答案有用,请标记为正确答案(在赞/踩图标下方打勾)。 - Paul Hiemstra
让我们在聊天中继续这个讨论:http://chat.stackoverflow.com/rooms/5683/discussion-between-paul-hiemstra-and-katie-t - Paul Hiemstra

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接