我正在尝试使用ddply汇总一个非常大的数据帧。
我需要按年份排序,然后在每个县(fips)计算RVPI == 1.我不知道如何在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
答案 0 :(得分:1)
这是使用dplyr
的想法。这里我删除了RVPI中有0的行。然后,对于每年,我使用fips
为每个distinct
选择了一个条目。例如,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