2013-08-02 55 views
0

我有一個數據集,它的長格式中的Measurements(Time)嵌套在Networkpartners(NP)中嵌套在Persons(ID)中,下面是它的外觀示例像(真實數據集有超過幾千行):從data.frame創建一個新的列

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個新變量:

一)Networkpartners的號(誰在這個測量沒有NA的結果)特定人員(ID)有時間1

b)網絡夥伴的數量在時間(誰沒有NA在此測量結果)一個特定的人(ID)2

C)Networkpartners數(誰在這個測量沒有NA的結果)的時間特定的人(ID) 3

所以我想創建一個數據集是這樣的:

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 

我會很感激你的幫助。

+0

其很難理解你的要求。你能否請格式化你的描述,所以它更有意義。 –

+0

編輯我想再次創建的3個變量的描述 – user2647568

回答

2

您可以創建一個變量而不是三個。我使用plyr軟件包中的ddply爲 。

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)) 
+0

好吧,我如何計算每個測量的每個網絡夥伴的數量的均值和sd以及每個測量的人數(ID)?如果在三次測量中網絡夥伴(NP)數量的三種方法中的至少兩種方法不同,我還希望做一個ANOVA重複測量來回答問題。 – user2647568

+0

@ Metrics:我無法在我的數據集中找到新變量。你能再次幫我嗎? – user2647568

+0

我可以用上面的代碼做到這一點;你應該也可以做到這一點! – Metrics

相關問題