Строка подмножества в df после первой строки, содержащей заданное c значение - PullRequest
1 голос
/ 17 июня 2020

Здравствуйте, у меня есть df, например

COL1 COL2 
A OKI
B OKO
C OKU
D OKP
E BRUT
F 0.87
G 0.82
H 0.57

, и я хотел бы подмножество df для всей строки после "BRUT" row

и получить:

COL1 COL2 
F 0.87
G 0.82
H 0.57

Ответы [ 4 ]

4 голосов
/ 17 июня 2020

Вы можете использовать match, чтобы получить строку с BRUT , добавить 1 и создать последовательность до nrow(x) для подмножества x, чтобы получить все строки после BRUT .

x[(match("BRUT", x$COL2)+1):nrow(x),]
#  COL1 COL2
#6    F 0.87
#7    G 0.82
#8    H 0.57

Или используя tail, как предлагает @thelatemail (спасибо!).

tail(x, -match("BRUT",x$COL2))

Или другие альтернативы:

x[-(1:match("BRUT", x$COL2)),]
x[-seq_len(match("BRUT", x$COL2)),]
3 голосов
/ 17 июня 2020

Кажется, вам нужны только числовые c значения. В этом случае более надежным решением может быть:

 df[grepl('[0-9]', df$COL2),]

#  COL1 COL2
#6    F 0.87
#7    G 0.82
#8    H 0.57
2 голосов
/ 17 июня 2020

Другой вариант с cumsum в base R

subset(df, cumsum(cumsum(COL2 == "BRUT")) >1)
#  COL1 COL2
#6    F 0.87
#7    G 0.82
#8    H 0.57

данные

df <- structure(list(COL1 = c("A", "B", "C", "D", "E", "F", "G", "H"
), COL2 = c("OKI", "OKO", "OKU", "OKP", "BRUT", "0.87", "0.82", 
"0.57")), class = "data.frame", row.names = c(NA, -8L))
2 голосов
/ 17 июня 2020

Вы можете использовать which.max, чтобы получить номер строки для первого значения «BRUT».

df[(which.max(df$COL2 == 'BRUT') + 1):nrow(df), ]

#  COL1 COL2
#6    F 0.87
#7    G 0.82
#8    H 0.57

Некоторые другие варианты при сравнении с номером строки:

df[seq_len(nrow(df)) > which.max(df$COL2 == 'BRUT'), ]

Использование dplyr:

library(dplyr)
df %>% filter(row_number() > which.max(COL2 == 'BRUT'))

data

df <- structure(list(COL1 = c("A", "B", "C", "D", "E", "F", "G", "H"
), COL2 = c("OKI", "OKO", "OKU", "OKP", "BRUT", "0.87", "0.82", 
"0.57")), class = "data.frame", row.names = c(NA, -8L))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...