#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'
whenb = '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