楼主: lutian08
4176 4

[问答] 如何合并相同结构的一堆数据集 [推广有奖]

  • 0关注
  • 8粉丝

副教授

52%

还不是VIP/贵宾

-

威望
0
论坛币
12499 个
通用积分
3.9143
学术水平
29 点
热心指数
33 点
信用等级
23 点
经验
7915 点
帖子
286
精华
0
在线时间
1410 小时
注册时间
2009-11-14
最后登录
2023-10-10

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
以下是用ls()显示的以d开头的data.frame,数据结构完全相同,如何合并成一个总的data.frame呢? 估计rbind()这个函数行,就是如何将ls()显示的结果放进rbind内的问题,请大家指点 [1] "d2005.csv"     "d2005_out.csv" "d2006.csv"     "d2006_out.csv"[5] "d2007.csv"     "d2007_out.csv" "d2008.csv"     "d2008_out.csv"[9] "d2009.csv"     "d2009_out.csv" "d2010.csv"     "d2010_out.csv"[13] "d2011.csv"     "d2011_out.csv" "d2012.csv"     "d2012_out.csv"
二维码

扫码加我 拉你入群

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

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

关键词:数据集 Frame rbind Fram Data 结构 如何

沙发
qoiqpwqr 发表于 2013-1-10 23:59:11 |只看作者 |坛友微信交流群
假设你有d1, d2, d3三个data frame

> ls()
[1] "d1" "d2" "d3"
> d1
  x y
1 1 2
> d2
  x y
1 3 5
> d3
  x y
1 3 2
> ds <- ls()
> ds
[1] "d1" "d2" "d3"
> out <- NULL
> for (i in ds) {
+ out <- rbind(out, get(i))
+ }
> out
  x y
1 1 2
2 3 5
3 3 2

使用道具

藤椅
ntsean 发表于 2013-1-11 04:37:59 |只看作者 |坛友微信交流群
最近在看R的关于language 方面的书,不过还不是用的很熟,试试下面的,应该还能再改进

和楼上一样,假设3个data frame

> ls()
[1] "d1" "d2" "d3"
> d1
  x y
1 1 2
2 2 3
> d2
  x y
1 2 4
2 3 6
> d3
  x   y
1 0 1.0
2 1 1.5
> ds <- ls()
> ds

那么一句就可以

> do.call("rbind", lapply(ds, function(x) eval(as.name(x))))
  x   y
1 1 2.0
2 2 3.0
3 2 4.0
4 3 6.0
5 0 1.0
6 1 1.5

使用道具

板凳
trier2006 发表于 2013-1-11 12:11:31 |只看作者 |坛友微信交流群
rbind
cbind
data.frame
最好的医生是自己,最好的药物是时间……

使用道具

报纸
lutian08 发表于 2013-1-11 16:44:30 |只看作者 |坛友微信交流群
谢谢大家的答复,最后我用下面的命令完成了任务,就没有用for产生一个个data.frame了,直接用lapply,然后do.call
setwd("D:\\DData\\Else\\Disease\\Input_time\\new_format\\address")
filenames<-list.files()
allframes = lapply(filenames,function(x) read.csv(x,header=TRUE))
ddata = do.call(rbind,allframes)


和ntsean的基本一致

使用道具

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

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-5-13 19:58