dataframe与list互相转换

内容概览

  • 1、dataframe转换为list
    -- 1.1. 每一列作为list的一个元素
    -- 1.2. 每一行作为list的一个元素
    -- 1.3. 对行进行分组,每一组作为list的一个元素
  • 2、对list进行转置
  • 3、list转换为dataframe
    -- 3.1 list的每个元素作为一列
    -- 3.2 list的每个元素作为一行

1、dataframe转换为list

1.1 每一列作为list的一个元素

> library(pacman)
> p_load(tidyverse)
> df <- read.csv("./data_set/store-reliab-data.csv", header = T) %>% as_tibble
> str(df)

## Classes 'tbl_df', 'tbl' and 'data.frame':    80 obs. of  7 variables:
##  $ testid    : int  1 1 1 1 1 1 1 1 2 2 ...
##  $ n         : int  8 8 8 8 8 8 8 8 8 8 ...
##  $ alpha     : num  0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 ...
##  $ times     : num  19.13 2.94 27.81 15.24 24.75 ...
##  $ delta     : int  0 1 0 0 0 0 0 0 0 1 ...
##  $ true_theta: int  10 10 10 10 10 10 10 10 10 10 ...
##  $ lb        : logi  NA NA NA NA NA NA ...

as.list()将每一列转换为一个list:

> list1 <- as.list(df)
> list1

## $testid
##  [1]  1  1  1  1  1  1  1  1  2  2  2  2  2  2  2  2  3  3  3  3  3  3  3  3  4  4
## [27]  4  4  4  4  4  4  5  5  5  5  5  5  5  5  6  6  6  6  6  6  6  6  7  7  7  7
## [53]  7  7  7  7  8  8  8  8  8  8  8  8  9  9  9  9  9  9  9  9 10 10 10 10 10 10
## [79] 10 10
## 
## $n
##  [1] 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8
## [41] 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8
## 
## $alpha
##  [1] 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05
## [17] 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05
## [33] 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05
## [49] 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05
## [65] 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05
## 
## $times
##  [1] 19.13  2.94 27.81 15.24 24.75 88.48 21.09 20.70 28.14  9.82  5.05  8.83 35.47
## [14]  9.63  4.41  8.49  1.41  0.79  7.72 52.79 15.64 13.29 19.14  0.50  3.24 13.20
## [27]  2.04 10.23  3.02  7.25  7.52  2.35 10.80 10.28 12.92 12.53  5.55  3.01 12.93
## [40]  9.95  5.14 20.08  4.22 21.79 32.18  5.58  5.95  9.77  2.10  3.09 11.06  7.74
## [53]  0.90 11.08  2.47 15.72 36.25  3.23 20.48  8.53  6.10  6.28 13.39 17.34 19.40
## [66]  1.90  2.59  0.35  2.35 10.43  5.43 18.39  1.93  5.04  4.09  0.30 11.42  4.02
## [79]  7.92  6.17
## 
## $delta
##  [1] 0 1 0 0 0 0 0 0 0 1 0 0 0 1 1 0 1 1 0 0 0 1 0 1 1 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1
## [41] 0 0 0 0 0 0 0 0 1 0 1 1 1 1 1 1 0 1 0 0 0 1 0 0 0 1 0 1 1 1 1 0 1 1 0 1 0 1 1 0
## 
## $true_theta
##  [1] 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10
## [27] 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10
## [53] 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10
## [79] 10 10
## 
## $lb
##  [1] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
## [27] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
## [53] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
## [79] NA NA

1.2 每一行作为list的一个元素

> list2 <- split(df, 1:nrow(df))
> list2$`10`

## # A tibble: 1 x 7
##   testid     n alpha times delta true_theta lb   
##               
## 1      2     8  0.05  9.82     1         10 NA

1.3 对行进行分组,每一组作为list的一个元素

> # 按testid进行分组
> list3 <- split(df, df$testid)
> list3$`5`

## # A tibble: 8 x 7
##   testid     n alpha times delta true_theta lb   
##               
## 1      5     8  0.05 10.8      1         10 NA   
## 2      5     8  0.05 10.3      1         10 NA   
## 3      5     8  0.05 12.9      1         10 NA   
## 4      5     8  0.05 12.5      1         10 NA   
## 5      5     8  0.05  5.55     1         10 NA   
## 6      5     8  0.05  3.01     1         10 NA   
## 7      5     8  0.05 12.9      1         10 NA   
## 8      5     8  0.05  9.95     1         10 NA

2、对list进行转置

> list2.z <- t(list2$`10`)
> list2.z

##             [,1]
## testid      2.00
## n           8.00
## alpha       0.05
## times       9.82
## delta       1.00
## true_theta 10.00
## lb            NA

3、list转化为dataframe

3.1 list的每个元素作为一列

> df1 <- as.data.frame(list1$testid)

3.2 list的每个元素作为一行

需要先转换为矩阵,再转换为数据框。

> df2 <- data.frame(matrix(unlist(list1$delta), byrow = T, nrow = 1), stringsAsFactors = F)
> df2

##   X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13 X14 X15 X16 X17 X18 X19 X20 X21 X22
## 1  0  1  0  0  0  0  0  0  0   1   0   0   0   1   1   0   1   1   0   0   0   1
##   X23 X24 X25 X26 X27 X28 X29 X30 X31 X32 X33 X34 X35 X36 X37 X38 X39 X40 X41 X42
## 1   0   1   1   0   0   0   1   1   1   1   1   1   1   1   1   1   1   1   0   0
##   X43 X44 X45 X46 X47 X48 X49 X50 X51 X52 X53 X54 X55 X56 X57 X58 X59 X60 X61 X62
## 1   0   0   0   0   0   0   1   0   1   1   1   1   1   1   0   1   0   0   0   1
##   X63 X64 X65 X66 X67 X68 X69 X70 X71 X72 X73 X74 X75 X76 X77 X78 X79 X80
## 1   0   0   0   1   0   1   1   1   1   0   1   1   0   1   0   1   1   0



作者:wonphen
链接:https://www.jianshu.com/p/a2cdb86dd17d
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

你可能感兴趣的:(python,windows,开发语言)