2014-01-25 4 views
4

У меня есть большой список, как этотПодменит п элементов из списка

str(sep) 
List of 54 
$ AK:'data.frame': 5 obs. of 3 variables: 
    ..$ nombre  : Factor w/ 4510 levels "ABBEVILLE AREA MEDICAL CENTER",..: 3085 40 1119 39 2176 
    ..$ heartattack: num [1:5] 13.4 14.5 15.5 15.7 17.7 
    ..$ state.name : Factor w/ 54 levels "AK","AL","AR",..: 1 1 1 1 1 
$ AL:'data.frame': 51 obs. of 3 variables: 
    ..$ nombre  : Factor w/ 4510 levels "ABBEVILLE AREA MEDICAL CENTER",..: 839 224 3587 1288 3063 4018 4259 221 4158 1531 ... 
    ..$ heartattack: num [1:51] 13.3 14.2 14.3 14.5 14.6 14.7 14.7 14.9 15 15 ... 
    ..$ state.name : Factor w/ 54 levels "AK","AL","AR",..: 2 2 2 2 2 2 2 2 2 2 ... 
$ AR:'data.frame': 35 obs. of 3 variables: 
    ..$ nombre  : Factor w/ 4510 levels "ABBEVILLE AREA MEDICAL CENTER",..: 114 214 843 4216 2612 211 2380 3695 4327 3516 ... 
    ..$ heartattack: num [1:35] 11.9 14.4 14.4 14.5 14.5 14.7 14.8 14.9 15.2 15.6 ... 
    ..$ state.name : Factor w/ 54 levels "AK","AL","AR",..: 3 3 3 3 3 3 3 3 3 3 ... 
$ AZ:'data.frame': 45 obs. of 3 variables: 
    ..$ nombre  : Factor w/ 4510 levels "ABBEVILLE AREA MEDICAL CENTER",..: 2200 521 206 205 1170 4509 3433 202 4084 4391 ... 
    ..$ heartattack: num [1:45] 12 12.2 12.8 13.6 13.6 13.7 13.9 14 14.1 14.1 ... 
    ..$ state.name : Factor w/ 54 levels "AK","AL","AR",..: 4 4 4 4 4 4 4 4 4 4 ... 
#continues 

Этот список исходит из разделения кадра данных, я хочу, чтобы выбрать конкретную позицию каждого уровня и хранить информацию 3 переменных игровых , Я пытался написать цикл for для этого, но я не могу найти способ подмножества правильно.

Например, если вы выбираете позицию 1, вы должны получить

   nombre       heartattack    state.name 
    POSITION 1 OF $AK$nombre)   POS 1 OF $AK$heartattack  POS 1 OF $AK$state.name 
    POSITION 1 OF $AL$nombre   POS 1 OF $AL$heartattack  POS 1 OF $AL$state.name 
    POSITION 1 OF.... 

я сделать реальный пример с меньшим списком просто иметь одни и те же переменные

list(a=mtcars, b=mtcars[8:16, ]) 
$a 
        mpg cyl disp hp drat wt qsec vs am gear carb 
Mazda RX4   21.0 6 160.0 110 3.90 2.620 16.46 0 1 4 4 
Mazda RX4 Wag  21.0 6 160.0 110 3.90 2.875 17.02 0 1 4 4 
Datsun 710   22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1 
Hornet 4 Drive  21.4 6 258.0 110 3.08 3.215 19.44 1 0 3 1 
Hornet Sportabout 18.7 8 360.0 175 3.15 3.440 17.02 0 0 3 2 
Valiant    18.1 6 225.0 105 2.76 3.460 20.22 1 0 3 1 
Duster 360   14.3 8 360.0 245 3.21 3.570 15.84 0 0 3 4 
Merc 240D   24.4 4 146.7 62 3.69 3.190 20.00 1 0 4 2 
Merc 230   22.8 4 140.8 95 3.92 3.150 22.90 1 0 4 2 
Merc 280   19.2 6 167.6 123 3.92 3.440 18.30 1 0 4 4 
Merc 280C   17.8 6 167.6 123 3.92 3.440 18.90 1 0 4 4 
Merc 450SE   16.4 8 275.8 180 3.07 4.070 17.40 0 0 3 3 
Merc 450SL   17.3 8 275.8 180 3.07 3.730 17.60 0 0 3 3 
Merc 450SLC   15.2 8 275.8 180 3.07 3.780 18.00 0 0 3 3 
Cadillac Fleetwood 10.4 8 472.0 205 2.93 5.250 17.98 0 0 3 4 
Lincoln Continental 10.4 8 460.0 215 3.00 5.424 17.82 0 0 3 4 
Chrysler Imperial 14.7 8 440.0 230 3.23 5.345 17.42 0 0 3 4 
Fiat 128   32.4 4 78.7 66 4.08 2.200 19.47 1 1 4 1 
Honda Civic   30.4 4 75.7 52 4.93 1.615 18.52 1 1 4 2 
Toyota Corolla  33.9 4 71.1 65 4.22 1.835 19.90 1 1 4 1 
Toyota Corona  21.5 4 120.1 97 3.70 2.465 20.01 1 0 3 1 
Dodge Challenger 15.5 8 318.0 150 2.76 3.520 16.87 0 0 3 2 
AMC Javelin   15.2 8 304.0 150 3.15 3.435 17.30 0 0 3 2 
Camaro Z28   13.3 8 350.0 245 3.73 3.840 15.41 0 0 3 4 
Pontiac Firebird 19.2 8 400.0 175 3.08 3.845 17.05 0 0 3 2 
Fiat X1-9   27.3 4 79.0 66 4.08 1.935 18.90 1 1 4 1 
Porsche 914-2  26.0 4 120.3 91 4.43 2.140 16.70 0 1 5 2 
Lotus Europa  30.4 4 95.1 113 3.77 1.513 16.90 1 1 5 2 
Ford Pantera L  15.8 8 351.0 264 4.22 3.170 14.50 0 1 5 4 
Ferrari Dino  19.7 6 145.0 175 3.62 2.770 15.50 0 1 5 6 
Maserati Bora  15.0 8 301.0 335 3.54 3.570 14.60 0 1 5 8 
Volvo 142E   21.4 4 121.0 109 4.11 2.780 18.60 1 1 4 2 

$b 
        mpg cyl disp hp drat wt qsec vs am gear carb 
Merc 240D   24.4 4 146.7 62 3.69 3.190 20.00 1 0 4 2 
Merc 230   22.8 4 140.8 95 3.92 3.150 22.90 1 0 4 2 
Merc 280   19.2 6 167.6 123 3.92 3.440 18.30 1 0 4 4 
Merc 280C   17.8 6 167.6 123 3.92 3.440 18.90 1 0 4 4 
Merc 450SE   16.4 8 275.8 180 3.07 4.070 17.40 0 0 3 3 
Merc 450SL   17.3 8 275.8 180 3.07 3.730 17.60 0 0 3 3 
Merc 450SLC   15.2 8 275.8 180 3.07 3.780 18.00 0 0 3 3 
Cadillac Fleetwood 10.4 8 472.0 205 2.93 5.250 17.98 0 0 3 4 
Lincoln Continental 10.4 8 460.0 215 3.00 5.424 17.82 0 0 3 4 

expected2<-rbind(mtcars[2,],mtcars[9,]) #mtcars [9,] is the 2nd position of mtcars[8:16,] 
expected4<-rbind(mtcars[4,],mtcars[11,]) #mtcars [11,] is the 4th position of mtcars[8:16,] 

expected2 
       mpg cyl disp hp drat wt qsec vs am gear carb 
Mazda RX4 Wag 21.0 6 160.0 110 3.90 2.875 17.02 0 1 4 4 
Merc 230  22.8 4 140.8 95 3.92 3.150 22.90 1 0 4 2 

expected4 
       mpg cyl disp hp drat wt qsec vs am gear carb 
Hornet 4 Drive 21.4 6 258.0 110 3.08 3.215 19.44 1 0 3 1 
Merc 280C  17.8 6 167.6 123 3.92 3.440 18.90 1 0 4 4 

Я надеюсь, что я мог бы сделать сам Чисто. Спасибо заранее!

+0

просьба представить реальный пример, что-то вроде: 'списка (а = mtcars, б = mtcars [1: 4,], с = CO2, d = CO2 [1: 4,])' и то, что вы ожидайте результата. –

+0

I * think * 'function (i) {plyr :: ldply (sep, function (x) data.frame (pos = i, x [i,])}' –

ответ

2

Это становится довольно близко:

d <- list(a=mtcars, b=mtcars[8:16, ]) 
f <- function(dat,i) { 
     plyr::ldply(dat,function(x) data.frame(pos=i,x[i,])) } 
f(d,2) 
## .id pos mpg cyl disp hp drat wt qsec vs am gear carb 
## 1 a 2 21.0 6 160.0 110 3.90 2.875 17.02 0 1 4 4 
## 2 b 2 22.8 4 140.8 95 3.92 3.150 22.90 1 0 4 2 
f(d,9) 
## .id pos mpg cyl disp hp drat wt qsec vs am gear carb 
## 1 a 9 22.8 4 140.8 95 3.92 3.150 22.90 1 0 4 2 
## 2 b 9 10.4 8 460.0 215 3.00 5.424 17.82 0 0 3 4 

Если я не делаю что-то глупое, ldply не сохраняет rownames.

rn <- function(dat,i) { 
    plyr::laply(dat,function(x) rownames(x)[i]) 
} 
f0 <- f(d,2) 
rownames(f0) <- rn(d,2) 
##    .id pos mpg cyl disp hp drat wt qsec vs am gear carb 
## Mazda RX4 Wag a 2 21.0 6 160.0 110 3.90 2.875 17.02 0 1 4 4 
## Merc 230  b 2 22.8 4 140.8 95 3.92 3.150 22.90 1 0 4 2 
+0

Спасибо большое! Это более чем идеально, теперь это просто нормальное подмножество –

 Смежные вопросы

  • Нет связанных вопросов^_^