楼主: dst1213
14293 8

[问答] 怎样用循环创建或赋值给多个数据框? [推广有奖]

  • 1关注
  • 3粉丝

已卖:2548份资源

副教授

52%

还不是VIP/贵宾

-

威望
0
论坛币
47036 个
通用积分
148.2191
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
470 点
帖子
471
精华
0
在线时间
836 小时
注册时间
2007-9-19
最后登录
2024-10-19

楼主
dst1213 发表于 2014-6-28 10:33:32 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
想把语句q1,q2,q3换成for循环,但是提示错误,不知道怎么回事。
怎样用循环创建或赋值给多个数据框?
谢谢!
  1. pddata <- read.table("D:\\pdd.csv", header=TRUE, sep=",")
  2. p1 <- data.frame(pddata$RO, pddata$TOOL, pddata$C_T, pddata$I_T,
  3. pddata$F_TIME, pddata$FP_Num)
  4. p2 <- na.omit(p1)
  5. p3 <- p2[which(p2$pddata.RO == "Reg" & p2$pddata.FP_Num >= 12.8),]
  6. p3 <- transform(p3, fdate = substr(p3$pddata.F_TIME, 1, 10))
  7. ve <- levels(p3$fdate)
  8. q1 <- p3[which(p3$fdate == ve[length(ve)]),]
  9. q2 <- p3[which(p3$fdate == ve[length(ve)-1]),]
  10. q3 <- p3[which(p3$fdate == ve[length(ve)-2]),]
  11. for (i in 1:length(ve)) q[i] <- p3[which(p3$fdate == ve[length(ve)])-i+1,]
  12. 错误提示:误于q <- p3[which(p3$fdate == ve[length(ve)]) - i + 1, ] : 类别为'closure'的对象不可以取子集
复制代码

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:数据框 for循环 Data For 不知道 levels

沙发
jmpamao 发表于 2014-6-28 14:28:55
最后一句 可以用 cbind 之类的 试试

藤椅
complicated 在职认证  发表于 2014-6-29 10:41:50
q1跟q[1]可完全不是一回事哦
可以做一个包含三个dataframe的list,然后q[[i]]这样引用试试

板凳
dst1213 发表于 2014-6-29 13:45:40
complicated 发表于 2014-6-29 10:41
q1跟q[1]可完全不是一回事哦
可以做一个包含三个dataframe的list,然后q[]这样引用试试
弄好了,谢谢

报纸
qq56521 发表于 2015-2-11 10:48:05
dst1213 发表于 2014-6-29 13:45
弄好了,谢谢
可以讲一下你是怎么做到的吗?

地板
dst1213 发表于 2015-2-12 12:26:02
qq56521 发表于 2015-2-11 10:48
可以讲一下你是怎么做到的吗?
复制代码
  1. pddata <- read.table("D:\\pdd.csv", header=TRUE, sep=",")
  2. p1 <- data.frame(pddataRO,pddataRO, pddataTOOL, pddataCT,pddataC_T, pddataI_T,
  3. pddataFTIME,pddataF_TIME, pddataFP_Num)
  4. p2 <- na.omit(p1)
  5. p3 <- p2[which(p2pddata.RO == "Reg" & p2pddata.RO == "Reg" & p2pddata.FP_Num >= 12.8),]
  6. p3 <- transform(p3, fdate = substr(p3$pddata.F_TIME, 1, 10))
  7. vep <- levels(p3$F_DATE)
  8. ve <- sort(vep, decreasing = TRUE)
  9. agf <- as.list(rep(1:3))
  10. aggnf <- as.list(rep(1:3))
  11. aggnaf <- as.list(rep(1:3))
  12. ao <- as.list(rep(1:3))
  13. aon <- as.list(rep(1:3))
  14. aod <- as.list(rep(1:3))
  15. tools <- c("atool","btool","ctool")
  16. for (i in 1:3)
  17. {
  18. agf[[i]] <- aggregate(p3[6], by=list(p3[,7],p3[,i+1]),mean)
  19. aggnf[[i]] <- aggregate(p3[6], by=list(p3[,7],p3[,i+1]),length)
  20. aggnaf[[i]] <- cbind(agf[[i]],aggnf[[i]][3])
  21. names(aggnaf[[i]])[1:4] <- c("ftime","atool")
  22. names(aggnaf[[i]])[2] <- tools[i]
  23. ao[[i]] <- aggnaf[[i]][order(aggnaf[[i]][1],decreasing = TRUE),]
  24. ao[[i]][[2]] <- factor(ao[[i]][[2]],levels=c("01-atool-001","01-atool-002","01-atool-003","01-atool-004","01-atool-005","01-atool-006","01-atool-007","01-btool-001","01-btool-002","01-btool-003","01-btool-004","01-btool-005","01-btool-006"))
  25. aon[[i]] <- na.omit(ao[[i]])
  26. aod[[i]] <- aon[[i]][which(aon[[i]][1] == ve[1] | aon[[i]][1] == ve[2] | aon[[i]][1] == ve[3] | aon[[i]][1] == ve[4]),]
  27. print(aod[[i]])
  28. }
复制代码
你参考一下吧,这个代码比较早了,还是可以优化的

7
qq56521 发表于 2015-2-13 14:37:45
谢谢回复,我后来查找了 assign(),可以赋数据框
for( i in 1:ver)
{
  
  v=gsub(" ","",paste("v",i))
  verr=gsub(" ","",paste("ver",i))
  
  verdata=data.frame(subset(data2,Version==i,))
  vcount=versioncount(verdata,v)
  a=paste("ver",i,seq="")
  b<-gsub(" ","",a)
  assign(b,vcount)  
}

8
na7688 发表于 2015-6-20 14:07:51
学习了!

9
gangan0020 发表于 2016-8-22 16:43:55
qq56521 发表于 2015-2-13 14:37
谢谢回复,我后来查找了 assign(),可以赋数据框
for( i in 1:ver)
{
学习了~谢谢

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-5 16:14