使用 dplyr 进行分组和过滤数据管理
group by and filter data management using dplyr
取一个简单的数据集
a <- c(1,2,3,4,5,6,7,8)
b <- c(1,2,2,1,2,2,2,2)
c <- c(1,1,1,2,2,2,3,3)
d <- data.frame(a,b,c)
现在我想过滤我的数据,以便我们 group_by(c)
然后删除所有没有 b=1
出现的数据。
因此结果 (e
) 应该看起来像 d
但没有底部的两行
我试过使用
e <- d %>%
group_by(c) %>%
filter(n(b)>1)
输出应包含下面绿色的数据并删除红色的数据
尝试
d %>%
group_by(c) %>%
filter(any(b == 1))
给出:
#Source: local data frame [6 x 3]
#Groups: c
#
# a b c
#1 1 1 1
#2 2 2 1
#3 3 2 1
#4 4 1 2
#5 5 2 2
#6 6 2 2
你可以试试
df <- d %>% mutate(test = ifelse((b != 1) == T, 0, 1)) %>% group_by(c) %>%
mutate(test = sum(test)) %>% filter(test != 0) %>% select(-test)
产生
# a b c
#1 1 1 1
#2 2 2 1
#3 3 2 1
#4 4 1 2
#5 5 2 2
#6 6 2 2
取一个简单的数据集
a <- c(1,2,3,4,5,6,7,8)
b <- c(1,2,2,1,2,2,2,2)
c <- c(1,1,1,2,2,2,3,3)
d <- data.frame(a,b,c)
现在我想过滤我的数据,以便我们 group_by(c)
然后删除所有没有 b=1
出现的数据。
因此结果 (e
) 应该看起来像 d
但没有底部的两行
我试过使用
e <- d %>%
group_by(c) %>%
filter(n(b)>1)
输出应包含下面绿色的数据并删除红色的数据
尝试
d %>%
group_by(c) %>%
filter(any(b == 1))
给出:
#Source: local data frame [6 x 3]
#Groups: c
#
# a b c
#1 1 1 1
#2 2 2 1
#3 3 2 1
#4 4 1 2
#5 5 2 2
#6 6 2 2
你可以试试
df <- d %>% mutate(test = ifelse((b != 1) == T, 0, 1)) %>% group_by(c) %>%
mutate(test = sum(test)) %>% filter(test != 0) %>% select(-test)
产生
# a b c
#1 1 1 1
#2 2 2 1
#3 3 2 1
#4 4 1 2
#5 5 2 2
#6 6 2 2