在R中提取特定值

时间:2019-05-29 18:58:47

标签: r

我是R编码的初学者,并且这里有示例数据。我正在尝试提取具有相同的Idvalue号的2个“ d7”和一个“ d1”的所有条目。


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 :(得分:0)

一个选择是根据每个'Idvalue_number'中'd1','d7'的频率filter

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_ <- 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))

答案 1 :(得分:0)

如下所示。]

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