我的数据看起来像这样。
> 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
$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 :(得分:4)
“嵌套数据框架”具有特定含义,因为提出了这个问题。 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
答案 1 :(得分: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