首页 > 解决方案 > 如何将列表转换为数据框

问题描述

我有 16 个项目的清单:

[[1]]
[1] -3.3354997  0.2301914  1.0979842

[[2]]
[1] -3.3275922  0.2505644  0.8881143

[[3]]
[1] -3.3743078  0.3318792  0.4635529

[[4]]
[1] -3.4310944  0.3303742  0.4707966

[[5]]
[1] -3.5093978  0.3527943  0.3970423
...

我想要这样一个数据框,其中 mu、szig 和 kszi 是列。对于每一行,我想计算一个新值1-exp(-(1+kszi*((0-mu)/szig))^(-1/kszi))并将其作为第 4 列添加到数据框中。

标签: rlist

解决方案


类似于@duckmayr:

# libraries ------------------------------------------------------------------------

library(dplyr)                    # you don't really need it but %>% looks great
library(purrr)                    # i use it to create example dataset only

# example data ---------------------------------------------------------------------

l <- replicate(16,                                        
               map_dbl(c(-3, 0, 1), ~ rnorm(1, mean = .x)), 
               simplify = F
               )

# explore the data -----------------------------------------------------------------

glimpse(l)                         

List of 16
 $ : num [1:3] -1.589 0.434 2.359
 $ : num [1:3] -3.962 0.347 2.985
 $ : num [1:3] -3.765 -0.115 0.117
 .................................
 $ : num [1:3] -2.125 -0.116 1.363

# convert list 2 data.frame, do some math ------------------------------------------

dat <- setNames(                      # set names for columns of returned data.frame
  do.call(rbind.data.frame, l),       # use rbind.data.frame to return data.frame
  c('mu', 'szig', 'kszi')             # vector of column names
  ) %>%                               # pipe resulting data.frame into mutate do math
  mutate(newcol = 1 - exp(-(1 + kszi * (-mu / szig))^(-1 / kszi)))

# examine the results --------------------------------------------------------------

head(dat)

         mu       szig      kszi    newcol
1 -1.589332  0.4341922 2.3591750 0.3180414
2 -3.962315  0.3472064 2.9853146 0.2619436
3 -3.764680 -0.1152990 0.1165112       NaN
4 -3.068161  0.9600714 1.6944156 0.2838741
5 -2.305584 -0.5308407 2.9096659       NaN
6 -2.671408  3.3653275 0.9817123 0.4265145

# post your answer to stackoverflow -------------------------------------------------

[1] "in progress..."

推荐阅读