Сортировка данных между строками в R

#r #sorting #if-statement #dataframe

#r #сортировка #if-оператор #фрейм данных

Вопрос:

Гипотетические данные:

  a <- c(400,500,600,700,100,600,700,100)
 b <- c(2,2,1,2,2,1,2,1)
 c <- c('NA','R','NA','G','NA','R','NA','G')
 data <- data.frame(a,b,c)
  

Вывод:

     a b  c
1 400 2 NA
2 500 2  R
3 600 1 NA
4 700 2  G
5 100 2 NA
6 600 1  R
7 700 2 NA
8 100 1  G
  

Вы можете легко подмножество, если оно находится в той же строке:

 subset(data, b== '1' amp; c =='R')
  

Вывод:

     a b c
6 600 1 R
  

Мой вопрос в том, как мне подмножество между строками? Например, как мне найти все значения c = ‘R’, когда b = ‘2’ в строке выше?

     a b  c
2 500 1  R
6 600 1  R
  

Ответ №1:

Как мне найти все значения c = 'R' when b = '2' в приведенной выше строке?

Как насчет

 b2above <- which(data$b == 2)   1L
cR <- which(data$c == "R")
id <- cR[cR %in% b2above]    ## or `id <- intersect(cR, b2above)`
data[id, ]

#    a b c
#2 500 2 R
#6 600 1 R
  

Ответ №2:

Вы тоже можете попробовать это:

 indices.b <- which(data$b == 2)
indices.c <- which(data$c == 'R')
if ((length(indices.b) > 0) amp;amp; (length(indices.c) > 0)) { # if such rows exist
  indices <- which((indices.c - 1) %in% indices.b) # check if consecutive rows
  if(length(indices)>0) data[indices.c[indices],]  # if consecutive rows exist
}


#     a b c
# 2 500 2 R
# 6 600 1 R