【发布时间】:2015-05-15 01:32:43
【问题描述】:
我想使用以下代码创建一个数据集,目的是在每组之间添加一个空白行,在每个处理之间添加三个空白行。我希望它看起来像以下数据集。
value group treatment
39.7 A 1
53.5 A 1
51.1 A 1
67.8 A 1
84.8 B 1
80.3 B 1
79.6 B 1
84.3 B 1
31.0 C 2
32.0 C 2
33.0 C 2
34.0 C 2
1.0 D 2
2.0 D 2
3.0 D 2
4.0 D 2
我写了一个双 for 循环,但效果不佳。我想不通。谁能告诉我它有什么问题?
mydata <- data.frame(value=c(39.7,53.5,51.1,67.8,84.8,80.3,79.6,84.3,31,32,33,34,1,2,3,4),group=c("A","A","A","A","B","B","B","B","C","C","C","C","D","D","D","D"),treatment=c(1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2))
blank <- data.frame(value=NA,group="NA",treatment=NA)
blank1 <- data.frame(value=c(NA,NA,NA),group=c("NA","NA","NA"),treatment=c(NA,NA,NA))
uni<-unique(mydata$treatment)
b<-length(uni)
out <- c()
out1<-c()
for (i in 1:b) {
emp<-subset(mydata,treatment==uni[i])
uni1<-unique(emp$group)
c<-length(uni1)
for (j in 1:c){
emp1<-subset(subset(mydata,treatment==uni[i]),group==uni1[j])
stack<-rbind(emp1,blank)
out<-rbind(stack,out)
}
stack1<-rbind(out,blank1)
out1<-rbind(stack1,out1)
}
【问题讨论】:
-
您实际上想要空白观察,或者这只是为了打印它?
-
哦,刚刚看了你的代码。重复使用
emp而不是嵌套subset会不会那么混乱。此外,您要添加四个空白行,而不是三个(因为您已经从内行获得了一个空白)。最后,您需要在第一个循环中初始化out——对于每个新的treatment,它需要为空。 -
嗨弗兰克,非常感谢您的回复。你是对的,我这样做是为了打印表格。您关于“在第一个循环内初始化”的建议太棒了,它解决了我的问题!!!哇~~我已经为此苦苦挣扎了很长时间.....非常感谢!
-
没问题;很高兴你解决了它:)
标签: r