Подмножество данных в R на основе теста - PullRequest
0 голосов
/ 14 марта 2019

Я хотел бы установить подкадр данных на основе выполненного теста. Например, я провел тест CheckUnsystematic(dat = long, deltaq = 0.025, bounce = 0.1, reversals = 0, ncons0 = 2)

Это дало мне это:

    > CheckUnsystematic(dat = long, deltaq = 0.025, bounce = 0.1, reversals = 0, ncons0 = 2)
    > CheckUnsystematic(dat = long, deltaq = 0.025, bounce = 0.1, reversals = 0, ncons0 = 2)
     id TotalPass DeltaQ DeltaQPass Bounce BouncePass Reversals ReversalsPass NumPosValues
1     2         3 0.9089       Pass 0.0000       Pass         0          Pass           15
2     3         3 0.6977       Pass 0.0000       Pass         0          Pass           16
3     4         2 0.0000       Fail 0.0000       Pass         0          Pass           18
4     5         3 0.2107       Pass 0.0000       Pass         0          Pass           18
5     6         3 0.2346       Pass 0.0000       Pass         0          Pass           18
6     7         3 0.9089       Pass 0.0000       Pass         0          Pass           16
7     8         3 0.9622       Pass 0.0000       Pass         0          Pass           15
8     9         3 0.8620       Pass 0.0000       Pass         0          Pass           11
9    10         3 0.9089       Pass 0.0000       Pass         0          Pass           12
10   11         3 0.9089       Pass 0.0000       Pass         0          Pass           11

Я хочу сохранить только те наблюдения, которые имеют "3" в "TotalPass".

Я попробовал это: CleanAPT <- long[ which(long$TotalPass==3),]

Ответы [ 2 ]

0 голосов
/ 14 марта 2019

Попробуйте это с вашим длинным набором данных.

CleanAPT <- subset(long, TotalPass == 3)

CheckUnsystematic(dat = CleanAPT, deltaq = 0.025, bounce = 0.1, reversals = 0, ncons0 = 2) 
0 голосов
/ 14 марта 2019

Поскольку вы отметили это как вопрос dplyr, давайте использовать его:

library(dplyr)

check_df <- CheckUnsystematic(dat = long, deltaq = 0.025, 
                              bounce = 0.1, reversals = 0, ncons0 = 2)

CleanAPT <- check_df %>%
  filter(TotalPass == 3)

Причина, по которой CleanAPT <- long[ which(long$TotalPass==3),] не работает, заключается в том, что вы вызываете фрейм данных long (которыйне изменяется из функции CheckUnsystematic).Выше я сохраняю результаты функции в check_df.Таким образом, CleanAPT <- check_df[which(check_df$TotalPass==3),] должно работать.

Слияние с исходными данными (трудно сказать точно, как это сделать, поскольку имена столбцов long - поэтому предполагается, что id присутствует и уникален), может бытьсделано с semi_join из dplyr:

long_filtered <- long %>%
  mutate(id = as.character(id)) %>%
  semi_join(CleanAPT %>%
              mutate(id = as.character(id)),
            by = "id")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...