2017-03-30 8 views
0

私は2列と70,000行のデータフレームを持っています。 1つの列は、家庭の識別子であり、下の例の列bです。もう1つの列は、世帯内の個体を指し、1からnまで番号をつけて、以下の例では何らかの誤り(1,2,3または1,4,5)で列番号aとします。データフレームのサブセット化とカウント値の向上

私は階層的クラスタリングを、世帯内の個人の数を特徴として使用しようとしています。私が下に書いたコードは、世帯内の人の数を数え、それらを適切な列と行に入れますが、実際のデータセットでは数分かかります。この情報を得るより良い方法はありますか?これは迅速であれば

fake.data <- data.frame(a = c(1,1,5,6,7,1,2,3,1,2,4), b = c("a", "a", "a", "a", "a", "b", "b", "b", "c", "c", "c")) 
fake.cluster <- data.frame(b = unique(fake.data$b)) 
fake.cluster$members <- sapply(fake.cluster$b, function(x)  length(unique(subset(fake.data, fake.data$b == x)$a))) 

答えて

1

は分からないのですが、あなたはさまざまな方法でdplyrを使用することができます。 1つのアプローチ:異なる行を取得し、bを数えます。ここで

library(dplyr) 
fake.cluster <- fake.data %>% 
    distinct() %>% 
    count(b) 
+0

を使用してオプションですあなたは私のヒーローです – IJH

1

data.table

library(data.table) 
setDT(fake.data)[, .(members = uniqueN(a)), b] 
# b members 
#1: a  4 
#2: b  3 
#3: c  3 
関連する問題