簡體   English   中英

匯總R中多列的頻率

[英]Aggregating frequencies with multiple columns in R

我正在使用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中有更好的方法。任何建議都值得贊賞。

library(data.table)
setDT(df)

n.houses = length(unique(df$House))
df[, length(unique(House))/n.houses, by = Appliance]
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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM