Произвольная выборка подмножеств переменной данных - PullRequest
5 голосов
/ 07 декабря 2011

Я работаю над большим набором данных, который содержит данные о поведении в пути за недельный период. В течение недели люди заполняли журнал отдельных поездок, которые они совершили в течение этой недели. Физические лица идентифицируются по уникальному идентификационному номеру (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"))

Любая помощь по вышеуказанному будет с благодарностью получена.

Большое спасибо,

Кейти

1 Ответ

8 голосов
/ 07 декабря 2011

Звучит как работа для 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    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
...