Как извлечь (или подмножество) все строки с условием столбца в кадре данных? - PullRequest
1 голос
/ 27 марта 2011

У меня есть следующий фрейм данных, и я хочу извлечь все строки, соответствующие одной и той же группе со статусом == 1.

Столбец состояния имеет значение 0 или 1.

df<-data.frame(time= rep(1:4,times=c(2,3,5,4)),status=c(0,0,1,1,0,0,0,0,0,0,1,0,0,0))

  Input Data 

   time status

1     1      0
2     1      0
3     2      1
4     2      1
5     2      0
6     3      0
7     3      0
8     3      0
9     3      0
10    3      0
11    4      1
12    4      0
13    4      0
14    4      0

Желаемыйвывод (с нумерацией столбцов группы в последовательности).

time status

   1      1
   1      1
   1      0
   2      1
   2      0
   2      0
   2      0

Размер моего фактического data.frame порядка 10 ^ 6 на 5.

Спасибо за вашу помощь.

Ответы [ 2 ]

3 голосов
/ 27 марта 2011

Хм, так вы хотите получить группу два и четыре, так как обе эти группы имеют значение состояния один, верно?И из этих двух групп вы хотели бы получить весь результат?

Если так, как насчет этого:

df <- data.frame(time = rep(1:4, times = c(2,3,5,4)),
                 status = c(0,0,1,1,0,0,0,0,0,0,1,0,0,0))

id <- unique(df[df$status == 1, "time"])
df2 <- df[df$time %in% id, ]

edit:

df2$time <- factor(df2$time, labels = c(1,2))
1 голос
/ 27 марта 2011

Я немного сбит с толку, когда вы пытаетесь сделать две разные вещи - сначала хотите извлечь строки со статусом == 1, тогда как в вашем желаемом выводе есть строки с нулями.Это один из способов извлечения строк со статусом == 1.

df1 <- data.frame(time= rep(1:4,times=c(2,3,5,4)),status=c(0,0,1,1,0,0,0,0,0,0,1,0,0,0))
df1$time <- factor(df1$time)
df1s <- split(df1, df1$time)
df1l <- lapply(df1s, function(x) {
            x[x$status == 1, ]
        })
df1l <- do.call("rbind", df1l)

или наоборот

df2 <- df1[df1$status == 1, ]
df2.l <- split(df2, as.factor(df2$time))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...