从data.frame创建新列

从data.frame创建新列,r,dataframe,R,Dataframe,我有一个长格式的数据集,其中度量值(时间)嵌套在Networkpartners(NP)中,而Networkpartners(NP)嵌套在Persons(ID)中,下面是一个它的示例(真实数据集有数千行): 现在我想创建3个新变量: a) 特定人员(ID)拥有时间1的网络合作伙伴数(在此测量结果中没有NA) b) 在时间2,特定人员(ID)的网络合作伙伴(在此测量结果中没有NA)数量 c) 时间3时特定人员(ID)的网络合作伙伴数量(此测量结果中没有NA) 因此,我想创建如下数据集: ID NP

我有一个长格式的数据集,其中度量值(时间)嵌套在Networkpartners(NP)中,而Networkpartners(NP)嵌套在Persons(ID)中,下面是一个它的示例(真实数据集有数千行):

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

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

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

我非常感谢你的帮助

您可以只创建一个变量,而不是三个。我使用的是plyr软件包中的
ddply
那个


很难理解你的要求。请将您的描述格式化一点,使其更有意义。编辑了我想创建的3个变量的描述againOk,以及如何计算三次测量中网络合作伙伴数量的平均值和sd以及每次测量的人数(ID)?我还想对重复测量值进行方差分析,以回答以下问题:网络合作伙伴数量(NP)的三个平均值中是否至少有两个在三个测量值中不同。@Metrics:我在数据集中找不到新变量。你能再帮我一次吗?我能用上面的代码做到这一点;你也应该能做到!好吧,也许我需要一段时间,因为它超过100000行。可能是这样吗?是的
ddply
处理大量行需要一些时间
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
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
mydata1<-ddply(mydata,.(ID,Time),transform, NP.T=length(Outcome[which(Outcome !="NA")]),comb=interaction(ID,Time))