我有两个问题。第一个是数据管理问题,第二个是创建新变量。我的数据是结构化的,但我不确定什么是正确的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),但是我在创建分隔委员会的新数据框时遇到了麻烦。我为任何困惑道歉并非常感谢任何帮助。
答案 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
})
它会由国会议员分割你的数据。然后它找到了国会议员的第一个任期,以便它可以找到国会议员在第一任期内所服务的所有委员会。然后它只是删除那些第一任期委员会出现的那个国会议员的所有行。