извлечение конкретных значений в R - PullRequest
0 голосов
/ 29 мая 2019

Я новичок в кодировании R, и у меня есть пример данных здесь.Я пытаюсь извлечь все записи, которые имеют 2 "d7" и один "d1" для идентичного числа Idvalue.


Sample   name         Idvalue_number
a       d1                 1
f       d7                 1
b       d7                 1
s       d1                 5
g       d7                 5
r       d7                 5
z       d1                 7
y       d7                 7
d       d1                 7



Expected output         
a   d1  1
f   d7  1
b   d7  1
s   d1  5
g   d7  5
r   d7  5


Вот некоторый код, который я пробовал, который не дает мне желаемого результата:

d1d7 <- data_ %>%  
  group_by(dvalue_number) %>% 
  filter(n() >= 3 & any(name == first(name)))

Может ли кто-нибудь помочь мне здесь?Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 29 мая 2019

Один из способов сделать это показан ниже.]

library(tidyverse)

#create a dataframe for example
df = data.frame(Sample = c("a", "f", "b", "s", "g", "r", "z", "y", "d"),
                name = c("d1", "d7", "d7", "d1",  "d7", "d7", "d7", "d7","d7"),
                Idvalue_number = c(1, 1, 1, 5, 5, 5, 7, 7, 7))


df %>% group_by(Idvalue_number, name) %>%
  summarise(total = n()) %>% 
  filter(name == "d1" & total == 1 | name == "d7" & total == 2)

  Idvalue_number name  total
           <dbl> <fct> <int>
1              1 d1        1
2              1 d7        2
3              5 d1        1
4              5 d7        2
0 голосов
/ 29 мая 2019

Опция будет filter на основе частоты 'd1', 'd7' в каждом 'Idvalue_number'

library(dplyr)
data_ %>% 
   group_by(Idvalue_number) %>% 
   filter(n() >= 3, sum(name == 'd1') == 1, sum(name == "d7")== 2)
# A tibble: 6 x 3
# Groups:   Idvalue_number [2]
#  Sample name  Idvalue_number
#  <chr>  <chr>          <int>
#1 a      d1                 1
#2 f      d7                 1
#3 b      d7                 1
#4 s      d1                 5
#5 g      d7                 5
#6 r      d7                 5

data

data_ <- structure(list(Sample = c("a", "f", "b", "s", "g", "r", "z", 
"y", "d"), name = c("d1", "d7", "d7", "d1", "d7", "d7", "d1", 
"d7", "d1"), Idvalue_number = c(1L, 1L, 1L, 5L, 5L, 5L, 7L, 7L, 
7L)), class = "data.frame", row.names = c(NA, -9L))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...