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