简体   繁体   中英

extracting specific values in R

I am a beginner in R coding and I have the sample data here. I am trying to extract all the entries which have 2 "d7" and one "d1" for identical Idvalue number.


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


Some code I have tried which is not giving me the desired output is here:

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

Could someone help me here? Thanks in advance.

An option would be to filter based on the frequency of 'd1', 'd7' in each '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))

One way that you can do it is shown below.]

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM