我想刪除選定列中具有單個值對的組合。R dplyr:在頻率檢查後排除單個組合值對
樣本數據:
df <- data.frame(a=c(sample(LETTERS[1:2],99,replace = TRUE),LETTERS[6]),
b=sample(letters[1:10],100,replace=TRUE))
Chekcing不同組合的計數:
df %>% group_by(a, b) %>% summarise(count=n()) %>% data.frame()
# a b count
# 1 A a 9
# 2 A b 4
# 3 A c 4
# 4 A d 2
# 5 A e 4
# 6 A f 2
# 7 A g 12
# 8 A h 6
# 9 A i 6
# 10 A j 7
# 11 B a 3
# 12 B b 5
# 13 B c 5
# 14 B d 5
# 15 B e 3
# 16 B f 8
# 17 B g 3
# 18 B h 6
# 19 B i 1
# 20 B j 4
# 21 F g 1
我可以移除組合對單一頻率如下面使用%>% filter(n() > 1)
# a b count
# 19 B i 1
# 21 F g 1
但,我想只刪除下面的一對,不管它們的頻率如何.e,1或大於1.不刪除對的原因是B仍然有其他組合對(帶有a,b,c,d,e,f,g,h)。
# a b count
# 21 F g 1
預期輸出:
# a b count
# 1 A a 9
# 2 A b 4
# 3 A c 4
# 4 A d 2
# 5 A e 4
# 6 A f 2
# 7 A g 12
# 8 A h 6
# 9 A i 6
# 10 A j 7
# 11 B a 3
# 12 B b 5
# 13 B c 5
# 14 B d 5
# 15 B e 3
# 16 B f 8
# 17 B g 3
# 18 B h 6
# 19 B i 1
# 20 B j 4
即,除去其中僅具有一個用於在a
列值組合的組合F-g
。
方案2:
df2 <- data.frame(c=c(1,2,4,6,8,3), d=c(2,3,5,7,9,5),
e=c('a1','a2','a3','a4','a5','a5'),
a=c('F','F','F','F','F','F'),
b=c('a','b','a','b','a','a'))
# c d e a b
# 1 1 2 a1 F a
# 2 2 3 a2 F b
# 3 4 5 a3 F a
# 4 6 7 a4 F b
# 5 8 9 a5 F a
# 6 3 5 a5 F a
df2 %>% group_by(a, b) %>% filter(n()>2)
# Source: local data frame [4 x 5]
# Groups: a, b [1]
#
# # A tibble: 4 x 5
# c d e a b
# <dbl> <dbl> <fctr> <fctr> <fctr>
# 1 1 2 a1 F a
# 2 4 5 a3 F a
# 3 8 9 a5 F a
# 4 3 5 a5 F a
df2 %>% group_by(a, b) %>% filter(n()>2) %>% summarise(count=n())
# Source: local data frame [1 x 3]
# Groups: a [?]
#
# # A tibble: 1 x 3
# a b count
# <fctr> <fctr> <int>
# F a 4
對於第二種情況,你有什麼期望輸出'DF2%>%計(A,B)' – akrun
預期產量空!我將從這裏未顯示的其他'a'值獲取數據。 – Prradep
目前還不清楚。這裏'df2%>%count(a,b)'給出了兩行'F',根據你的邏輯,它不應該被刪除。看起來你有一個新的邏輯 – akrun