2010-06-18 64 views
0

我有一个县在1995 - 2005年,每个州收到未达到状态的列表。IN R计数分级数据

我想知道每个州每年有多少县接受这种状态。

如果我的数据被格式化这样,

State1 Country1 YR1 Yr2 Yr3 Yr4... 
State1 Country2 YR1 Yr2 Yr3 Yr4 
State2 County1 Yr1 Yr2..... 

每年变量可以有1或为零,因为一个县可能获得或在一段时间失去这一地位。

我需要每年统计每个州有多少县有未达标状态(YRx = 1),但不能想到如何去做。

回答

0

此数据是否被组织为数据框?如果是这样,那么行如何定义?如果您的数据按以下方式组织:

State County Year Attainment 
State1 County1 1  1 
State1 County1 2  0 
State1 County1 3  1 
State1 County1 4  1 
State1 County2 1  1 
State1 County2 2  1 
... 

然后,您可以使用1行代码获取您正在查找的摘要数据类型。希望您的符号意味着你的数据是这样的组织:

State County Yr1 Yr2 Yr3 Yr4 
State1 County1 1 0 1 1 
State1 County2 1 1 1 1 

使用melt()reshape包从格式到一个以上的布局得到。

new.df <- melt(df, id = 1:2) 

它会调用年度变量variable和心得变量value。现在,通过巧妙使用cast函数,也可以从reshape包中获得所需的摘要。

counties <- cast(new.df, State ~ value, fun = length) 
head(counties) 

但是,如果你的数据组织,以便每一个州,县,今年是一列,而且只有1行久了,我想你最好的下一步将是重新格式化的R之外的数据,使得它至少像我的第二个例子。

+0

它的组织的第二种方式。我想我正确地格式化了我的问题,但是当我发布它时,它合并为一行。 – Alison 2010-06-18 19:31:11

+0

JoFrhwld-我做到了,但它把我所有年份的总结,而不是每年的总结。我仍然在处理这个问题,如果您有任何建议,我将不胜感激。至少你的帮助让我进一步! – Alison 2010-06-21 17:38:39

2

我用下面的例子:

data <- read.table(textConnection(" 
state county Yr1 Yr2 Yr3 Yr4 
state1 county1 1 0 0 1 
state1 county2 0 0 0 0 
state1 county3 0 1 0 0 
state1 county4 0 0 0 0 
state1 county5 0 1 0 1 
state2 county6 0 0 0 0 
state2 county7 0 0 1 0 
state2 county8 1 0 0 1 
state2 county9 0 0 0 0 
state2 county10 0 1 0 0 
state3 county11 1 1 1 1 
state3 county12 0 0 0 0 
state3 county13 0 1 1 0 
state3 county14 0 0 0 1 
state4 county15 0 0 0 0 
state4 county16 1 0 1 0 
state4 county17 0 0 0 0 
state4 county18 1 1 1 1 
"), header = T) 

library(reshape) 
data2 <- melt(data, id = c("state", "county")) 
cast(data2, state ~ variable, fun = sum) 

结果:

state Yr1 Yr2 Yr3 Yr4 
1 state1 1 2 0 2 
2 state2 1 1 1 1 
3 state3 1 2 2 2 
4 state4 2 1 2 1 
+0

哇,非常感谢。整个下午我都在苦苦挣扎。我会尝试一下。 – Alison 2010-06-18 19:22:40