2

私は、人 (ID) にネストされた Networkpartners (NP) に Measurements (Time) がネストされた longformat のデータセットを持っています。

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

ここで、次の新しい変数「NP.T」を作成したいと思います。

特定の時間における特定の人 (ID) のネットワーク パートナー (この測定で結果 1 と結果 2 に NA がない) の数。言い換えれば、2 つの結果変数で 1 つまたはまったく NA を持たない NP を数えたいと考えています。そして、両方の結果変数に NA を持つ NP を数えたくありません。

したがって、次のようなデータセットを作成したいと思います。

ID  NP  Time Outcome1 Outcome2 NP.T
1   11  1    4        NA       2
1   11  2    3        4        2
1   11  3    NA       NA       1
1   12  1    2        3        2
1   12  2    3        1        2
1   12  3    3        2        1
2   21  1    2        4        2
2   21  2    NA       NA       1
2   21  3    NA       NA       1
2   22  1    4        NA       2
2   22  2    4        3        1
2   22  3    NA       4        1

特定の時間に特定の人 (ID) の Networkpartners (2 つの結果の 1 つに NA がない) の数をカウントする変数を作成する方法に関する前の質問で提供された解決策があります。

library(plyr)
mydata1<-ddply(mydata,.(ID,Time),transform, NP.T=length(Outcome[which(Outcome !   ="NA")]))

さて、誰かが私の特定の問題に対する答えを見つけるのを手伝ってくれたら、とても感謝しています!

4

2 に答える 2

1

これは、以前に投稿したものと同様の plyr パッケージを使用したソリューションです。

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), Outcome1 = c(4L, 3L, NA, 2L, 3L, 3L, 2L, NA, NA, 
4L, 4L, NA), Outcome2 = c(NA, 4L, NA, 3L, 1L, 2L, 4L, NA, NA, 
NA, 3L, 4L)), .Names = c("ID", "NP", "Time", "Outcome1", "Outcome2"
), class = "data.frame", row.names = c(NA, -12L))
> mydata
   ID NP Time Outcome1 Outcome2
1   1 11    1        4       NA
2   1 11    2        3        4
3   1 11    3       NA       NA
4   1 12    1        2        3
5   1 12    2        3        1
6   1 12    3        3        2
7   2 21    1        2        4
8   2 21    2       NA       NA
9   2 21    3       NA       NA
10  2 22    1        4       NA
11  2 22    2        4        3
12  2 22    3       NA        4

mydata1<-ddply(mydata,.(ID,Time),transform,NP.T=length(which(!(Outcome1 =="NA" & Outcome2 =="NA"))))
> mydata1
   ID NP Time Outcome1 Outcome2 NP.T
1   1 11    1        4       NA    2
2   1 12    1        2        3    2
3   1 11    2        3        4    2
4   1 12    2        3        1    2
5   1 11    3       NA       NA    1
6   1 12    3        3        2    1
7   2 21    1        2        4    2
8   2 22    1        4       NA    2
9   2 21    2       NA       NA    1
10  2 22    2        4        3    1
11  2 21    3       NA       NA    1
12  2 22    3       NA        4    1
于 2013-08-08T22:34:49.397 に答える