【问题标题】:Sort by year then count dummy variable for each county (ddply)按年份排序,然后计算每个县的虚拟变量(ddply)
【发布时间】:2014-11-22 23:47:50
【问题描述】:

我正在尝试使用 ddply 总结一个非常大的数据框。

我需要按年份排序,然后在 RVPI == 1 时计算每个县 (fips)。我不确定如何在 ddply 中执行此操作,希望能提供任何帮助。

这是一个示例代码:

Lines <- "year  fips   RVPI  indivID
1950   1001 1 1
1950   1001 1 2    
1950   1001 1 3     
1951   1001 1 3  
1951   1001 1 4  
1951   1002 0 5  
1952  1002  0 6  
1952  1003  0 6  
1952  1004  1 7  
1952  1004  1 7  
1953  1004 1 8 
1953  1006 0 8
1953  1001 1 8
1953  1006 0 9 "

DF <- read.table(text = Lines, check.names = FALSE, header = TRUE)
df <- as.data.frame(DF)

ddply(df, .(year), summarize,
      RVPI = sum(RVPI))

表格的预期结果(与上面的示例不完全一致,但总体而言)

Year     RVPI(# of counties)
1950        1
1951        1
1952        1
1953        2

【问题讨论】:

    标签: r dataframe plyr


    【解决方案1】:

    这是一个使用dplyr 的想法。在这里,我删除了 RVPI 中为 0 的行。然后,对于每一年,我使用distinct 为每个fips 选择一个条目。例如,有 1950 年和 fips 1001 的三行。distinct 只选择其中之一。最后,我计算了每年有多少个fips。

    library(dplyr)
    
    filter(df, RVPI != 0) %>%
        group_by(year) %>%
        distinct(fips) %>%
        summarise(numOfFips = n())
    

    或者,这会产生相同的结果。

    summarise(group_by(df, year, fips), sumRVPI = sum(RVPI)) %>%
        filter(sumRVPI != 0) %>%
        group_by(year) %>%
        summarize(numOfFips = n())
    
    #  year numOfFips
    #1 1950         1
    #2 1951         1
    #3 1952         1
    #4 1953         2
    

    如果您尝试在输出中包含indivID,您可以这样做。

    filter(df, RVPI != 0) %>%
        group_by(year, fips) %>%
        summarise(numOfIndiv = n()) %>%
        summarise(numOfFips = n(), numOfIndiv = sum(numOfIndiv)) 
    
    #  year numOfFips numOfIndiv
    #1 1950         1          3
    #2 1951         1          2
    #3 1952         1          2
    #4 1953         2          2
    

    【讨论】:

    • 谢谢。这行得通,但我不需要包括 fips 在内的摘要。由于我的数据库太大了,它每年都会吐出每一个fips,我需要这些年来这些总数的总和
    • 这是您的预期吗?告诉我。
    • 我需要每年 RVPI == 1 的县总数(fips)。所以我需要年 | RVPI 作为一个表格,每个 RVPI 是 RVPI == 1 的县(fips)的数量。这更清楚吗?感谢您的帮助
    • 您介意我让您在问题中写下您的预期结果(表格)吗?这将非常有帮助。 :)
    • 当然。我添加了一个我正在寻找的通用表。见上文。
    猜你喜欢
    • 2015-01-24
    • 2020-11-26
    • 2018-10-01
    • 2014-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多