将数据帧组合为列表中的设置输出

时间:2013-12-11 08:19:28

标签: r data.table

我正在尝试使用rbindlist调用组合一堆data.frames(它们都具有完全相同的结构)。

我的所有data.frames都有相同的命名约定“WUP_”,后跟国家/地区名称。因此,我使用下面的调用首先列出我的环境中以“WUP”开头的所有data.frames,然后应用rbindlistas:

wlist <- rbindlist(list(ls(pattern="WUP*")))

但是,我收到以下错误:

Error in rbindlist(list(ls(pattern = "WUP*"))) : 
  Item 1 of list input is not a data.frame, data.table or list

列表本身看起来像这样 - 所以我这部分工作:

list(c("WUP_Angola", "WUP_Botswana", "WUP_Burundi", "WUP_Comoros", 
"WUP_Eritrea", "WUP_Ethiopia", "WUP_Kenya", "WUP_Lesotho", "WUP_Madagascar", 
"WUP_Malawi", "WUP_Mayotte", "WUP_Mozambique", "WUP_Namibia", 
"WUP_Rwanda", "WUP_Seychelles", "WUP_Somalia", "WUP_South.Africa", 
"WUP_South.Sudan", "WUP_Swaziland", "WUP_Uganda", "WUP_United.Republic.of.Tanzania", 
"WUP_Zambia", "WUP_Zimbabwe"))

我已经检查了环境中对象的结构,它们是data.frames,例如

str(WUP_Angola)
'data.frame':   48 obs. of  23 variables:
 $ Location: Factor w/ 1 level "Angola": 1 1 1 1 1 1 1 1 1 1 ...
 $ Year    : int  1980 1985 1990 1995 2000 2005 2010 2015 1980 1985 ...
 $ Sex     : Factor w/ 2 levels "Female","Male": 1 1 1 1 1 1 1 1 1 1 ...
 $ Area    : Factor w/ 3 levels "Rural","Total",..: 1 1 1 1 1 1 1 1 2 2 ...
 $ X.0.4.  : int  567 628 654 679 707 757 795 788 746 896 ...
 $ X.5.9.  : int  426 476 496 526 550 589 637 678 563 682 ...
 $ X.10.14.: int  345 366 378 392 409 452 482 523 472 552 ...
 $ X.15.19.: int  295 314 312 327 340 381 403 432 403 472 ...
 $ X.20.24.: int  248 271 272 275 291 321 345 367 336 401 ...
 $ X.25.29.: int  210 231 239 247 253 275 296 321 277 332 ...
 $ X.30.34.: int  163 192 201 212 218 225 244 266 213 272 ...
 $ X.35.39.: int  143 149 167 178 188 191 199 219 184 208 ...
 $ X.40.44.: int  125 131 131 150 161 165 171 180 158 179 ...
 $ X.45.49.: int  107 114 114 117 135 138 146 152 134 153 ...
 $ X.50.54.: int  90 96 97 99 101 111 118 126 113 128 ...
 $ X.55.59.: int  75 80 80 83 85 83 95 103 93 106 ...
 $ X.60.64.: int  58 62 63 65 67 66 68 79 73 83 ...
 $ X.65.69.: int  43 46 47 49 51 51 52 54 53 61 ...
 $ X.70.74.: int  28 30 31 33 35 34 36 38 34 40 ...
 $ X.75.79.: int  15 17 17 18 20 20 21 23 18 22 ...
 $ X.80..  : int  8 9 10 11 12 12 14 15 10 12 ...
 $ Total   : int  2945 3214 3311 3461 3622 3868 4123 4366 3881 4599 ...
 $ X       : logi  NA NA NA NA NA NA ...

知道我在这里做错了什么吗?

2 个答案:

答案 0 :(得分:4)

rbindlist获取对象列表(例如数据框)。您正在给出一个名单。 而是尝试:

wlist <- rbindlist(mget(ls(pattern="WUP*")))

mget()将按名称从环境中获取对象。

更正了实施评论。

答案 1 :(得分:1)

卡尔的上述建议几乎就在那里。删除'list'调用会产生一个data.frames,它将所有其他数据组合在一起,如下所示:

wlist <- rbindlist((mget(ls(pattern="WUP*"))))