R - 随着时间的推移有效地组织表格

时间:2014-12-24 17:50:35

标签: r time-series grouping

我想知道如何在一段时间内将数据框架组织成表格。我有一个政治数据集,在过去的几十年里,某些组织在账单上采取立场,以及该法案是通过还是失败。

我知道如何将数据单独组织到表中,但我逐个进行,很难看到趋势。 stackoverflow社区似乎总是采用巧妙的方式对数据进行分组。这是一些模拟数据:

Data <- data.frame(
  year = sample(1998:2004, 200, replace = TRUE),
  outcome = sample(0:1, 200, replace = TRUE),
  biz1 = sample(-2:2, 200, replace = TRUE),
  biz2 = sample(-2:2, 200, replace = TRUE),
  biz3 = sample(-2:2, 200, replace = TRUE)
)

在商业中,负数意味着他们反对结果,积极的结果意味着他们支持它。在结果中,零表示法律没有通过,1表示它已经通过。

与其他组织相比,我希望使用表格来了解每个企业如何随着时间的推移变得或多或少成功,通过观察他们的正数与1匹配和负数匹配0的情况(与正面匹配相反)负数的数量)。

一些注意事项

  1. 在数据集中,我有大约100个业务作为列,所以我绝对需要一种有效的方法来制作表而不命名每一列。我可以在一个范围内选择它们,例如125:300,因为它们是一起订购的。

  2. 当然,我对所有想法持开放态度!请随意列出任何其他方式来查看此内容。

  3. 如果我没有正确地提出这个问题,请告诉我如何改进它。

1 个答案:

答案 0 :(得分:2)

以上关于您的问题过于模糊的评论是正确的。说这让我感兴趣,模糊不清让我自由地解释......

首先,如果账单失败,我会将outcome重新编码为-1。那么ourtcome * bizn在某种意义上就是该立法对该业务的成功评分:如果要么业务支持的账单通过,或者业务反对的账单失败,则为正。然后有几种方法可视化分数。这里有一些可以帮助您入门。

# re-code outcomes
Data$outcome <- ifelse(Data$outcome==0,-1,1)

library(reshape2)   # for melt(...)
library(ggplot2)
gg <- melt(Data, id=c("year","outcome"),
           variable.name="business", value.name="support")
gg$score <- with(gg,outcome*support)  # score represents level of success

# mean success vs. year with +/- 1 sd
ggplot(gg,aes(x=year,y=score, color=business))+
  stat_summary(fun.data="mean_sdl")+
  stat_summary(fun.y=mean,geom="line")+
  facet_grid(business~.)

# boxplot of success scores
ggplot(gg,aes(x=factor(year),y=score))+
  geom_boxplot(aes(fill=business))+
  facet_grid(business~.)

# barplot of success/failure frequencies
# excludes cases where a business did not take a position pro or con
gg.bar <- aggregate(score~year+business,gg,
                    function(eff)c(success=sum(eff>0),failure=sum(eff<0)))
gg.bar <- data.frame(gg.bar[1:2],gg.bar$score)
ggplot(gg.bar,aes(x=factor(year)))+
  geom_bar(aes(y=success,fill="success"),stat="identity")+
  geom_bar(aes(y=-failure,fill="failure"),stat="identity")+
  geom_hline(xintercept=0,linetype=2,color="blue")+
  scale_fill_discrete(name="",breaks=c("success","failure"))+
  labs(x="",y="frequency")+
  facet_grid(business~.)

所有这些都代表了相当简单的数据查看方式。如果这是一个严肃的项目,我可能会对企业进行主要成分分析,以确定那些倾向于支持或反对同一立法的企业集团。然后,我将对主要组成部分进行聚类分析,以确定那些倾向于吸引企业集团支持或反对的立法群体。

另一种解决方法是使用各种业务的支持/反对作为预测因子对结果进行逻辑回归。这会告诉你哪些企业往往更有影响力。