2011-01-31 3 views
1

У меня есть данные, которые выглядят следующим образом.Как создать вложенный фрейм данных

> file1="dat1.tab" 
> file2="dat2.tab" 
> dat1<-read.table(file1) 
> print(dat1) 
V1 V2 
1 1 43 
2 1 43 
3 1 43 
> 
> dat2<-read.table(file2) 
> print(dat2) 
V1 V2 
1 1 43 
2 1 21 
3 1 43 
4 1 43 
5 1 24 
6 0 24 
> 

Столбец V1 относится к этикеткам и V2 для оценки прогноза.

Как я могу создать структуру данных под названием ВИЧ, который выглядит следующим образом:

> HIV 
$hiv.dat1 
$hiv.dat1$predictions 
$hiv.dat1$predictions[[1]] 
[1] 43 43 43 
$hiv.dat$labels 
$hiv.dat$labels[[1]] 
[1] 1 1 1 

$hiv.dat2 
$hiv.dat2$predictions 
$hiv.dat$predictions[[1]] 
[1] 43 21 43 43 24 24 
$hiv.dat2$labels 
$hiv.dat2$labels[[1]] 
[1] 1 1 1 1 1 0 
+0

Почему вы хотите это сделать? Кажется маловероятным создание структуры данных, с которой легче работать. – hadley

ответ

1

Вы можете перебирать детали, но примерно:

dat1 <- data.frame(V1 = rep(1, 5), V2 = sample(c(40:45), 5) 
dat2 <- data.frame(V1 = sample(c(0,1), 5, replace = TRUE), 
V2 = sample(c(40:45), 5, replace = TRUE)) 

> hiv <- list(hiv.dat1 = as.list(dat1), hiv.dat2 = as.list(dat2)) 
> hiv 
$hiv.dat1 
$hiv.dat1$V1 
[1] 1 1 1 1 1 

$hiv.dat1$V2 
[1] 41 42 43 40 44 


$hiv.dat2 
$hiv.dat2$V1 
[1] 0 1 1 0 0 

$hiv.dat2$V2 
[1] 42 43 40 44 43 
+0

@RL: Спасибо. Но он дает «$ hiv.dat1 $ V1» вместо «$ hiv.dat1 $ V1 [[1]]». Есть ли способ достичь этого? Во-вторых, как можно назвать V1 «ярлыками»? – neversaint

3

«Уплотненный кадр данных» принял по определенному значению, поскольку этот вопрос был задан. В 2016 году он, вероятно, будет интерпретироваться следующим образом:

dat1 <- data.frame(labels = rep(1, 3), predictions = rep(43, 3)) 
dat2 <- data.frame(labels = c(rep(1, 5), 0), 
        predictions = c(43, 21, 43, 43, 24, 24)) 
dat1 
#> labels predictions 
#> 1  1   43 
#> 2  1   43 
#> 3  1   43 
dat2 
#> labels predictions 
#> 1  1   43 
#> 2  1   21 
#> 3  1   43 
#> 4  1   43 
#> 5  1   24 
#> 6  0   24 

dat <- list(HIV = 1:2, data = list(dat1, dat2)) 
attr(dat, "row.names") <- 1:2 
class(dat) <- c("tbl_df", "data.frame") 

dat # nested data frame, using the "tidyr" package definition of "nest" 
#> HIV          data 
#> 1 1      1, 1, 1, 43, 43, 43 
#> 2 2 1, 1, 1, 1, 1, 0, 43, 21, 43, 43, 24, 24 
str(dat) 
#> Classes 'tbl_df' and 'data.frame': 2 obs. of 2 variables: 
#> $ HIV : int 1 2 
#> $ data:List of 2 
#> ..$ :'data.frame': 3 obs. of 2 variables: 
#> .. ..$ labels  : num 1 1 1 
#> .. ..$ predictions: num 43 43 43 
#> ..$ :'data.frame': 6 obs. of 2 variables: 
#> .. ..$ labels  : num 1 1 1 1 1 0 
#> .. ..$ predictions: num 43 21 43 43 24 24 

library(tidyr) 
dat # nicer printing with the tidyr package 
#> Source: local data frame [2 x 2] 
#> 
#>  HIV    data 
#> (int)    (chr) 
#> 1  1 <data.frame [3,2]> 
#> 2  2 <data.frame [6,2]> 
unnest(dat) # ordinary data frame representation 
#> Source: local data frame [9 x 3] 
#> 
#>  HIV labels predictions 
#> (int) (dbl)  (dbl) 
#> 1  1  1   43 
#> 2  1  1   43 
#> 3  1  1   43 
#> 4  2  1   43 
#> 5  2  1   21 
#> 6  2  1   43 
#> 7  2  1   43 
#> 8  2  1   24 
#> 9  2  0   24 
Смежные вопросы