我正在尝试将“mother data.frame”细分为三个data.frames:名为dfrm
的母数据框具有不同的变量,包括id
(标识),{{1 (三个时间点),数值变量time
和因子Ht
,其中3个等级取决于Ht。
我使用fac
函数创建了2个data.frames dfrm2
和dfrm3
,对每个ddply
变量具有一定级别的主题进行排序时间点:
fac
我想创建第三个data.frame,其中包含尚未在id <- rep(c(seq(1,50,1)),3)
time <- factor(rep(c("day1", "day2", "day3"), c(50,50,50)), levels=c("day1", "day2", "day3"), labels=c("day1", "day2", "day3"), ordered=TRUE)
Ht <- rnorm(150, mean=30, sd=3)
A <- rnorm(150, mean=7, sd=10)
df <- as.data.frame(cbind(id,time,Ht,A))
head(df)
fac <- factor(cut(df$Ht, breaks=c(1,30,35,100), labels=c("<30%","<35%", ">35%"), include.lowest=TRUE))
dfrm <- as.data.frame(cbind(df,fac))
library(plyr)
dfrm2 <- ddply(dfrm, "id", function(x) if(all(x$fac=="<30%")) x else NULL)
nrow(dfrm2)
[1] 18
dfrm3 <- ddply(dfrm, "id", function(x) if(all(x$fac=="<35%")) x else NULL)
nrow(dfrm3)
[1] 6
或dfrm2
中选择的所有行。到目前为止,我没有成功。
我认为这个想法可能是指示R根据尚未选择的dfrm3
从母dfrm
中删除行。有人可以帮我吗?
答案 0 :(得分:2)
您可以使用split function
:
l<-split(df,dfrm$fac)
names(l)<-paste0("data",1:length(levels(dfrm$fac)))
根据评论更新:
dfrm4<-dfrm[!(dfrm$id %in% dfrm2$id|dfrm$id %in% dfrm3$id),]
> dim(dfrm4)
[1] 117 5
答案 1 :(得分:0)
我认为plyr
是R中几乎所有问题的解决方案,但在我看来这是一个例外;括号子集将更清晰&amp;更容易。
dfrm2 <- dfrm[dfrm$fac=="<30%", ]
dfrm3 <- dfrm[dfrm$fac=="<35%", ]
dfrm4 <- dfrm[dfrm$fac!="<30%" % dfrm$fac!="<35%", ]