我是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)))
有人可以帮我吗?预先感谢。
答案 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