R 如何保持值只出现在一个组中?
我正在处理一个数据帧,如:R 如何保持值只出现在一个组中?,r,data-manipulation,R,Data Manipulation,我正在处理一个数据帧,如: groups . values a . 1 a . 1 a 2 b . 2 b . 3 b . 3 c . 4 c . 5 c . 6 d . 6 d . 7 d . 2 问题是要把它变成这样: groups . values a . 1 a . 1 b .
groups . values
a . 1
a . 1
a 2
b . 2
b . 3
b . 3
c . 4
c . 5
c . 6
d . 6
d . 7
d . 2
问题是要把它变成这样:
groups . values
a . 1
a . 1
b . 3
b . 3
c . 4
c . 5
d . 7
我想保留其值仅出现在一个组中的行。例如,值2会被删除,因为它出现在三个不同的组中,但值1会被保留,尽管它只在一个组中出现两次
dplyr包中是否有任何函数可以处理此问题?或者我必须编写自己的函数?按值分组,看看列组是否只有一个元素。这可以通过ave完成
在哪里
或者,data.table解决方案:
setDT(x)[, .SD[uniqueN(groups)==1], values]
df %>% group_by(values) %>% filter(n_distinct(groups) == 1)
# # A tibble: 7 x 2
# # Groups: values [5]
# groups values
# <chr> <int>
#1 a 1
#2 a 1
#3 b 3
#4 b 3
#5 c 4
#6 c 5
#7 d 7
对原始数据帧df使用sqldf包:
当您要求dplyr解决方案时:
setDT(x)[, .SD[uniqueN(groups)==1], values]
df %>% group_by(values) %>% filter(n_distinct(groups) == 1)
# # A tibble: 7 x 2
# # Groups: values [5]
# groups values
# <chr> <int>
#1 a 1
#2 a 1
#3 b 3
#4 b 3
#5 c 4
#6 c 5
#7 d 7
与
到目前为止,您有什么经验?我尝试了DATAFRAME%>%group\u bygroups%>%DistinctValue之类的方法,但它只保留每个组中唯一的值。
setDT(x)[, .SD[uniqueN(groups)==1], values]
library(sqldf)
result <- sqldf("SELECT * FROM df
WHERE `values` IN (
SELECT `values` from (
SELECT `values`, groups, count(*) as num from df
GROUP BY `values`, groups) t
GROUP BY `values`
HAVING COUNT(1) = 1
)")
df %>% group_by(values) %>% filter(n_distinct(groups) == 1)
# # A tibble: 7 x 2
# # Groups: values [5]
# groups values
# <chr> <int>
#1 a 1
#2 a 1
#3 b 3
#4 b 3
#5 c 4
#6 c 5
#7 d 7
df <- structure(list(groups = c("a", "a", "a", "b", "b", "b", "c", "c", "c", "d", "d", "d"),
values = c(1L, 1L, 2L, 2L, 3L, 3L, 4L, 5L, 6L, 6L, 7L, 2L)),
row.names = c(NA, -12L), class = "data.frame")