#r #dplyr
#r #dplyr
Вопрос:
Есть ли способ создать новый DF для значений tdif
только тогда, когда NP==0
они находятся в строке непосредственно над ним?
Subject tdif NP
1 KM3 63.8 0
2 KM3 4.6 1
3 KM3 70.6 0
4 KM3 30.4 1
5 KM3 44.8 0
6 KM3 12.1 1
7 KM3 27.1 1
8 KM3 36.0 0
9 KM3 38.0 1
10 KM3 0.1 1
Таким образом, желаемый результат будет:
Subject tdif NP
1 KM3 4.6 1
2 KM3 30.4 1
3 KM3 12.1 1
4 KM3 38.0 1
Я доволен использованием tidyverse
or любых других пакетов (до сих пор я использовал его для обработки своих необработанных данных), но у меня было чертовски много времени на поиск помощи для этого конкретного типа обработки данных в R.
Ответ №1:
Мы могли бы использовать which
, чтобы получить индекс строки where NP == 0
и добавить к нему 1, чтобы получить следующую строку.
df[which(df$NP == 0) 1, ]
# Subject tdif NP
#2 KM3 4.6 1
#4 KM3 30.4 1
#6 KM3 12.1 1
#9 KM3 38.0 1
Если у вас 0 в последней строке, это может дать вам дополнительную строку с NA
s, которую вы можете удалить, сравнив значения с nrow(df)
или используя dplyr::lag
.
С dplyr
lag
library(dplyr)
df %>% filter(lag(NP) == 0)
Комментарии:
1. Насколько я могу судить по моим фактическим данным, это работает. Спасибо! Как именно это работает? Я все еще новичок в понимании синтаксиса кода.
2. @Kevin
which(df$NP == 0)
возвращает номер строки, к которомуNP == 0
мы добавляем 1, чтобы получить следующую строку, и используем этот индекс для подмножества фрейма данных, тогда какlag
просто выбирает те строки, предыдущееNP
значение которых было 0.