【问题标题】:Data transformation with the package "bestNormalize" on a list with multiple dataframes [duplicate]在具有多个数据框的列表上使用包“bestNormalize”进行数据转换[重复]
【发布时间】:2020-07-17 06:59:25
【问题描述】:

我想转换我的数据,但我不太确定哪种方法最好。因此,我使用包“bestNormalize”。

它在数据框的一列上运行良好,但是我有两个数据框的列表(每个数据框有 9 列),我想将函数“bestNormalize”应用于每一列。我尝试映射,但它不起作用。

此外,我想将包的其他函数(数据转换,例如使用函数“yeojohnson”)与我将“bestNormalize”函数应用于每个数据帧的每一列的方式相同。

有人知道这是如何工作的吗?提前致谢。


install.packages("bestNormalize")
library(bestNormalize)

install.packages("purrr")
library(purrr)

# Data
a <- data.frame(
  met1 = rnorm(n = 100, mean = 0, sd = 1),
  met2 = rnorm(n = 100, mean = 0, sd = 1),
  met3 = rnorm(n = 100, mean = 0, sd = 1),
  met4 = rnorm(n = 100, mean = 0, sd = 1),
  met5 = rnorm(n = 100, mean = 0, sd = 1),
  met6 = rnorm(n = 100, mean = 0, sd = 1),
  met7 = rnorm(n = 100, mean = 0, sd = 1),
  met8 = rnorm(n = 100, mean = 0, sd = 1),
  met9 = rnorm(n = 100, mean = 0, sd = 1)
)


y <- data.frame(
  met1 = rnorm(n = 100, mean = 0, sd = 1),
  met2 = rnorm(n = 100, mean = 0, sd = 1),
  met3 = rnorm(n = 100, mean = 0, sd = 1),
  met4 = rnorm(n = 100, mean = 0, sd = 1),
  met5 = rnorm(n = 100, mean = 0, sd = 1),
  met6 = rnorm(n = 100, mean = 0, sd = 1),
  met7 = rnorm(n = 100, mean = 0, sd = 1),
  met8 = rnorm(n = 100, mean = 0, sd = 1),
  met9 = rnorm(n = 100, mean = 0, sd = 1)
)


my_list <- list(a, y)
 
# Works:
bestNormalize::bestNormalize(my_list[[1]]$met1)

# Does not work:
stand_dat_men <- my_list  %>% purrr::map(~mutate_at(.x, .vars = vars(met1:met9), ~bestNormalize(.)))





【问题讨论】:

    标签: r list transformation purrr


    【解决方案1】:

    bestNormalize 返回一个“bestNormalize”类的对象,你可以将它存储在一个列表中。您也可以在此处使用summarise 而不是mutate

    library(dplyr) 
    library(bestNormalize)
    
    output <- purrr::map(my_list, ~.x %>% summarise_at(vars(met1:met9), 
                                   ~list(bestNormalize(.))))
    

    summarise_at 现在已替换为 across

    output <- purrr::map(my_list, ~.x %>% summarise(across(met1:met9, 
                                   ~list(bestNormalize(.)))))
    

    【讨论】:

    • 谢谢。它有效,但问题是输出。我这样做的原因是我想在转换后进行回归。我的真实列表包含 10 个带有更多(未转换)变量的数据框,我希望有一个带有 10 个数据框的列表作为输出。现在我有一个包含 10 个数据帧的列表,并且在每个数据帧中我都有一个列表......如何提取“取消列出”输出? as.data.frame 不起作用。注意:我使用包的“yeojohnson”函数而不是 bestNormalize。
    • @Jzlia10 我已经回答了关于bestNormalize函数的问题。你想从bestNormalize::bestNormalize(my_list[[1]]$met1) 得到什么输出?
    • 我想要数据框中的变量“x.t”。为此,我创建了一个函数:function(x) {list
    • 一开始我使用了 bestNormalize 函数。根据结果​​,我应用了 yeojohnson 来进行数据的转换。最后,这是我需要的。我虽然这两个功能的“程序”是相同的。
    猜你喜欢
    • 2020-05-31
    • 2021-11-17
    • 2020-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-20
    相关资源
    最近更新 更多