【问题标题】:Randomly sampling subsets of dataframe variable随机抽样数据帧变量的子集
【发布时间】:2011-12-07 11:21:07
【问题描述】:

我正在处理一个包含每周旅行行为数据的大型数据集。在一周的过程中,人们完成了他们在那一周进行的个人旅行的日志。个人由唯一的标识号 (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"))

我们将不胜感激。

非常感谢,

凯蒂

【问题讨论】:

  • 感谢您添加示例数据,这样可以更轻松地回复。

标签: r plyr


【解决方案1】:

听起来像是 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 日进行了两次旅行,所以这应该包含在第二个数据框中。
  • 你在问题​​中解释得很好,我只是没有仔细阅读:)。
  • 我在处理数据时遇到的另一个快速问题 - 对于某些 ID 号,我只有一天的数据 - 我如何调整上面的代码以说明是否只有一个天,那很好,它可以合并到新的数据子集(以及每个唯一标识符的正常两个选定天)?下面的代码...
  • Df1
  • 我更新了代码,这应该可以解决问题。如果你喜欢这个答案,你能把它标记为正确答案吗(在up/downvote图标下打勾)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-16
  • 2014-06-22
  • 2016-10-31
  • 2019-09-20
  • 1970-01-01
相关资源
最近更新 更多