R中的数据管理和编码

时间:2014-11-16 22:24:55

标签: r data-management

我有两个问题。第一个是数据管理问题,第二个是创建新变量。我的数据是结构化的,但我不确定什么是正确的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是会员。聪是他们所服务的大会。 Comm是他们所坐的委员会。 (顺便说一句,Comm实际上是一个分类变量)。

我可以自己弄清楚新的变量(Y),但是我在创建分隔委员会的新数据框时遇到了麻烦。我为任何困惑道歉并非常感谢任何帮助。

1 个答案:

答案 0 :(得分: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
})

它会由国会议员分割你的数据。然后它找到了国会议员的第一个任期,以便它可以找到国会议员在第一任期内所服务的所有委员会。然后它只是删除那些第一任期委员会出现的那个国会议员的所有行。