2016-04-11 19 views
1

en Böyle veri var diyelim:R - Belirli bir gruba karşılık gelen sütunların hepsinin bir grupta eşit olup olmadığını nasıl kontrol edebilirim?

group value 
1  0 
1  0 
1  0 
2  1 
2  0 
3  1 
3  0 
4  1 
4  1 

nasıl grupla ilgili değerler tüm eşit değerlere sahip olup olmadığını görmek için "grubun" tüm değerleri arasında yineleme olacaktır. Değerlerin aynı olmadığı SADECE grupları içeren bir veri kümesine sahip olmak istiyorum. Bunun için bir döngüden kaçınmanın kolay bir yolu olduğundan emin değilim.

+0

Baz R'de mi yoksa paketlere mi açık mısınız? – brittenb

+0

Paketler iyi – Parseltongue

+0

'kitaplık (dplyr); % df>% group_by (grup)%>% filtre (uzunluk (benzersiz (değer))> 1) 'hile yapmalıdır. – brittenb

cevap

6

Sen yapabilirsiniz:

tapply(DF$value, DF$group, FUN = function(x) length(unique(x))) > 1L 

#  1  2  3  4 
# FALSE TRUE TRUE FALSE 

ave ile aynı masayı alt küme yazmak için:

paketleri ile
DF[ ave(DF$value, DF$group, FUN = function(x) length(unique(x))) > 1L, ] 

# group value 
# 4  2  1 
# 5  2  0 
# 6  3  1 
# 7  3  0 

, ikincisi adım gibi görünüyor ...

library(data.table) 
setDT(DF)[, if (uniqueN(value) > 1L) .SD, by=group] 

# or 
library(dplyr) 
DF %>% group_by(group) %>% filter(n_distinct(value) > 1L) 
+2

Bir çeşit sihirbazsınız. Teşekkür ederim. – Parseltongue

0

Burada başka bir seçenek table

kullanıyor
tbl <- rowSums(table(df1)>0)>1 
subset(df1, group %in% names(tbl)[tbl]) 
# group value 
#4  2  1 
#5  2  0 
#6  3  1 
#7  3  0 
İlgili konular