0

我有两个问题。第一个是数据管理问题,第二个是新变量的创建。我的数据是结构化的,但我不确定什么是正确的 r 代码。

我正在查看国会委员会的数据。我的分析单位是每位国会议员和他们在国会期间担任的委员会。例如,如果国会议员 A 参加了三届国会的拨款和方式和手段,那将是总共 6 项意见。

首先,我想创建一个只有成员转入的委员会的数据集。因此,我想删除所有与委员会有关的意见,该委员会成员在其第一个国会任期开始时被给予。

其次,在我的数据集仅包含成员在国会第一任期后转入的委员会之后,我需要创建一个新变量。在新变量中,我希望成员在观察中获得一个,在该观察中,这是他们在该委员会任职的最后一次代表大会。所有其他不是他们服务的最后一次代表大会的意见(以该委员会为条件)都获得零分。

例如,我想这样做:

data.frame(
ID = c(1L, 1L, 1L, 1L, 2L, 2L, 3L, 4L, 4L, 4L, 5L, 5L, 5L, 5L), 
Cong = c(52L, 53L, 54L, 53L, 50L, 50L, 48L, 48L, 48L, 49L, 47L, 48L, 49L, 49L), 
Comm = c(3L, 3L, 3L, 4L, 2L, 7L, 4L, 3L, 7L, 7L, 3L, 6L, 6L, 8L)

)

ID  Cong  Comm
1    52    3
1    53    3
1    54    3
1    53    4
2    50    2
2    50    7
3    48    4
4    48    3
4    48    7
4    49    7
5    47    3
5    48    6
5    49    6
5    49    8

看起来像这样:

ID  Cong  Comm  Y
1    53   4     1
5    48   6     0
5    49   6     1
5    49   8     1

例如,ID 1 和与 Comm 3 对应的所有观察结果都被删除,因为他在国会的第一个任期内被分配到该委员会。Y 是我需要创建的新变量。

ID是会员。Cong是他们服务的代表大会。Comm 是他们所在的委员会。(顺便说一句,Comm 实际上是一个分类变量)。

我或许可以自己计算出新变量 (Y),但在创建分隔委员会的新数据框时遇到了麻烦。对于任何混淆,我深表歉意,并非常感谢任何帮助。

4

1 回答 1

1

如果我正确理解了您的问题,那么这是 plyr 的潜在快速解决方案。

library(plyr)

x = data.frame(
  ID = c(1L, 1L, 1L, 1L, 2L, 2L, 3L, 4L, 4L, 4L, 5L, 5L, 5L, 5L), 
  Cong = c(52L, 53L, 54L, 53L, 50L, 50L, 48L, 48L, 48L, 49L, 47L, 48L, 49L, 49L), 
  Comm = c(3L, 3L, 3L, 4L, 2L, 7L, 4L, 3L, 7L, 7L, 3L, 6L, 6L, 8L))

result  = ddply(x, "ID", .fun = function(congressman){ 

  #Find a congressman's first term
  first_term = min(congressman$Cong)

  #Find the committees he/she served on that term
  first_terms_committees = congressman$Comm[congressman$Cong == first_term]

  #Find the rows in which those committees exist
  to_remove  = which(congressman$Comm %in% first_terms_committees)
  #Remove those rows
  congressman = congressman[-to_remove,]

  congressman
})

它按国会议员拆分您的数据。然后它找到国会议员的第一个任期,以便它可以找到国会议员在第一个任期内任职的所有委员会。然后,它只是删除了第一任委员会出现的那个国会议员的所有行。

于 2014-11-16T23:45:55.180 回答