2015-08-22 89 views
0

我正在使用R中有三列的數據框:House,Appliance和Count。這些數據基本上是每個房屋內不同類型廚房用具的清單。數據看起來像這樣:(添加用於說明目的空格)R中有多個列彙總頻率

House  Appliance  Count 
    1   Toaster   2 

    2   Dishwasher  1 
    2   Toaster   1 
    2   Refrigerator  1 
    2   Toaster   1 

    3   Dishwasher  1 
    3   Oven    1 

對於每個設備類型,我想能夠計算包含這些設備中的至少一個房屋的比例。請注意,在我的數據中,單個房屋可能在一個類別中有零個,一個或多個設備。如果房屋沒有設備,則該房屋的數據中沒有列出。如果房子有多個設備,則該設備可以列出一次,計數> 1(例如,房屋1中的烤麪包機),或者可以列出兩次(每個房間的計數= 1,例如房屋2中的烤麪包機)。

舉個例子展示什麼,我試圖計算,在這裏顯示的數據,住房與烤麪包機的比例是0.67(四捨五入),因爲房屋的2/3至少有一個烤麪包機。同樣,有烤箱的房子的比例爲0.33(因爲只有1/3的房子有烤箱)。我不在乎任何房子有多於一個的烤麪包機 - 只有至少有一個。

我也愚弄與周圍的R中xtabsftable,但是我不相信,他們提供簡單的解決方案。部分問題是,這些功能將爲每個房屋提供號碼,然後拋出我的房屋計算比例。這是我目前的做法:

temp1 <- xtabs(~House + Appliance, data=housedata) 
    temp1[temp1[,] > 1] <- 1 # This is needed to correct houses with >1 unit. 
    proportion.of.houses <- data.frame(margin.table(temp1,2)/3) 

這似乎工作,但它不是優雅。我猜在R中有更好的方法來做到這一點。任何建議非常感謝。

回答

1
library(data.table) 
setDT(df) 

n.houses = length(unique(df$House)) 
df[, length(unique(House))/n.houses, by = Appliance] 
1
library(dplyr) 
n <- length(unique(df$House)) 
df %>% 
    group_by(Appliance) %>% 
    summarise(freq = n_distinct(House)/n) 

輸出:

 Appliance  freq 
1 Dishwasher 0.6666667 
2   Oven 0.3333333 
3 Refrigerator 0.3333333 
4  Toaster 0.6666667