3390 14

[问答] 如何写这个循环 [推广有奖]

  • 0关注
  • 1粉丝

已卖:5份资源

博士生

80%

还不是VIP/贵宾

-

威望
0
论坛币
842 个
通用积分
0.0004
学术水平
5 点
热心指数
5 点
信用等级
6 点
经验
5905 点
帖子
149
精华
0
在线时间
532 小时
注册时间
2012-10-15
最后登录
2025-11-11

楼主
愤怒的小鸟! 发表于 2015-5-13 17:39:56 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
我有一个数据框,第一列是时间,后面的列是:每一列代表一个省的年GDP数据,如何用循环实现:将第二列与第一列形成一个新的数据框,第三列与第一列形成一个新的数据框······直到最后一列与第一列形成一个新的数据框。谢谢谢谢
二维码

扫码加我 拉你入群

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

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

关键词:如何写 GDP数据 数据框 GDP 如何用 如何

沙发
纯洁理想奋斗 在职认证  发表于 2015-5-13 17:55:01
提示: 作者被禁止或删除 内容自动屏蔽

藤椅
hugebear 发表于 2015-5-14 09:29:12
设原始的数据框为mydat,
  1. p <- dim(mydat)[2] # 返回mydat的列数
  2. sep.dat <- vector(mode = "list", length = p - 1) #将你所需要的各个子数据框储存在一个名为sep.dat的list中
  3. for (i in 2:p)
  4. sep.dat[[i]] <- mydat[, c(1, i)]
复制代码
已有 1 人评分经验 论坛币 收起 理由
李会超 + 40 + 20 热心帮助其他会员

总评分: 经验 + 40  论坛币 + 20   查看全部评分

板凳
愤怒的小鸟! 发表于 2015-5-14 15:40:25
hugebear 发表于 2015-5-14 09:29
设原始的数据框为mydat,
谢谢,我还要对list中的数据进行处理,好像list下面的数据不能进行处理吧

报纸
letsgoaway 发表于 2015-5-14 15:50:19
data表示数据,第一列表示时间,n表示你的省份的数量,假设是34,那么
n=34
varname<-paste("GDP",1:n,sep="")#生成GDP1至GDP34个变量名~
j=2
for(i in varname){
  assign(i,data[,c(1,j)])#将时间和各省的GDP提取出来
  j=j+1
}

最后GDP1就是第一个数据框,GDP2就是第二个数据框........GDP34就是第三十四个数据框

你也可以生成一个list,全部存在list里面如:
aa=list()
for(i in 1:33){
  aa[]=data[,c(1,(i+1))]
}

这样生成的数据全在aa里了,aa[[1]]就是第一个数据框,aa[[2]]就是第二个。。。。

已有 2 人评分经验 论坛币 学术水平 热心指数 信用等级 收起 理由
愤怒的小鸟! + 5 + 1 + 1 + 1 观点有启发
李会超 + 60 + 20 热心帮助其他会员

总评分: 经验 + 60  论坛币 + 25  学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

地板
愤怒的小鸟! 发表于 2015-5-17 11:05:00
letsgoaway 发表于 2015-5-14 15:50
data表示数据,第一列表示时间,n表示你的省份的数量,假设是34,那么
n=34
varname
哇,你好厉害啊,再问个子问题啊,第一种方法中生成了34个数据框,如果我想生成的时候同时把这些数据框导出到D盘中,应该怎么加程序

7
jarodmeng 发表于 2015-5-17 20:46:46
建议使用tidyr包里的gather功能。

8
letsgoaway 发表于 2015-5-18 10:31:39
愤怒的小鸟! 发表于 2015-5-17 11:05
哇,你好厉害啊,再问个子问题啊,第一种方法中生成了34个数据框,如果我想生成的时候同时把这些数据框导 ...
在循环里面加一句write.csv(data[,c(1,j)],paste(i,".csv",sep=""))就可以了,输出结果在工作目录里面

9
愤怒的小鸟! 发表于 2015-5-18 11:12:35
letsgoaway 发表于 2015-5-18 10:31
在循环里面加一句write.csv(data[,c(1,j)],paste(i,".csv",sep=""))就可以了,输出结果在工作目录里面
太好了,谢谢啊,我还需要对GDP1,GDP2一直到GDP34等全部数据框中的第二列做排序,应该怎么写程序一次性出来出来(GDP1,GDP2等全部数据框已经全部在R中了),类似这样的批量处理已经困扰我很长时间了

10
letsgoaway 发表于 2015-5-19 10:55:39
愤怒的小鸟! 发表于 2015-5-18 11:12
太好了,谢谢啊,我还需要对GDP1,GDP2一直到GDP34等全部数据框中的第二列做排序,应该怎么写程序一次性出 ...
这个就用一个循环将34个数据合成一个(rbind函数数),然后再排序就行了,如果只对向量排序就用sort,如果对数据框排序就用order;
下面用iris为例,按第四列排序后的数据框:
order.nos=order(iris[,4],decreasing=T)
iris[order.nos,]

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-30 16:32