0

我有一个长格式的数据集,其中测量(时间)嵌套在网络伙伴(NP)中,网络伙伴(NP)嵌套在人(ID)中,这是它的外观示例(真实数据集有数千行):

ID  NP  Time Outcome
1   11  1    4
1   11  2    3
1   11  3    NA
1   12  1    2
1   12  2    3
1   12  3    3
2   21  1    2
2   21  2    NA
2   21  3    NA
2   22  1    4
2   22  2    4
2   22  3    4

现在我想创建 3 个新变量:

a) 特定人 (ID) 的网络合作伙伴数量(在此测量的结果中没有 NA)时间 1

b) 在时间 2 的特定人员 (ID) 的网络合作伙伴数量(在此测量的结果中没有 NA)

c) 在时间 3 的特定人员 (ID) 的网络合作伙伴数量(在此测量的结果中没有 NA)

所以我想创建一个这样的数据集:

ID  NP  Time Outcome  NP.T1  NP.T2  NP.T3
1   11  1    4        2      2      1
1   11  2    3        2      2      1
1   11  3    NA       2      2      1
1   12  1    2        2      2      1
1   12  2    3        2      2      1
1   12  3    3        2      2      1
2   21  1    2        2      1      1
2   21  2    NA       2      1      1
2   21  3    NA       2      1      1
2   22  1    4        2      1      1
2   22  2    4        2      1      1
2   22  3    4        2      1      1

我将衷心感谢您的帮助。

4

1 回答 1

2

您可以只创建一个变量而不是三个。我正在使用ddplyplyr 包。

mydata<-structure(list(ID = c(1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 
2L, 2L), NP = c(11L, 11L, 11L, 12L, 12L, 12L, 21L, 21L, 21L, 
22L, 22L, 22L), Time = c(1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 
1L, 2L, 3L), Outcome = c(4L, 3L, NA, 2L, 3L, 3L, 2L, NA, NA, 
4L, 4L, 4L)), .Names = c("ID", "NP", "Time", "Outcome"), class = "data.frame", row.names = c(NA, 
-12L))


    library(plyr)
    mydata1<-ddply(mydata,.(ID,Time),transform, NP.T=length(Outcome[which(Outcome !="NA")]))
>mydata1
   ID NP Time Outcome NP.T
1   1 11    1       4    2
2   1 12    1       2    2
3   1 11    2       3    2
4   1 12    2       3    2
5   1 11    3      NA    1
6   1 12    3       3    1
7   2 21    1       2    2
8   2 22    1       4    2
9   2 21    2      NA    1
10  2 22    2       4    1
11  2 21    3      NA    1
12  2 22    3       4    1

更新:您还可以使用interaction创建结合 ID 和时间的唯一变量(梳)

mydata1<-ddply(mydata,.(ID,Time),transform, NP.T=length(Outcome[which(Outcome !="NA")]),comb=interaction(ID,Time))
于 2013-08-03T00:40:46.847 回答