【问题标题】:add a new column with scaled values to all dataframes in a list将具有缩放值的新列添加到列表中的所有数据框
【发布时间】:2019-01-09 14:25:32
【问题描述】:

我有一个数据框列表,所有这些都包含一个用户列和另一个名为“VD”的列。我想使用 VD 列的缩放值向列表中的所有数据框“VD_z”添加一个新列

df1 <- data.frame(VD = 1:3, user=letters[1:3])
df2 <- data.frame(VD = 4:6, user=letters[4:6])
filelist <- list(df1,df2)

看了几个类似的问题,终于尝试了:

filelist <- mapply(cbind(filelist, VD_z= lapply(filelist, function(df) scale(df$VD))))

我期望列表中的所有数据框现在都有带有缩放值的新 VD_z 列,如下所示:

df1 <- data.frame(VD = 1:3, user=letters[1:3], VD_z=c(-1,0,1))
df2 <- data.frame(VD = 4:6, user=letters[4:6], VD_z=c(-1,0,1))

我得到的是一条错误消息“数组中的错误(x,c(长度(x),1L),如果(!is.null(名称(x)))列表(名称(x),: 'data' 必须是向量类型,为 'NULL'

感谢您的帮助!

【问题讨论】:

    标签: r


    【解决方案1】:

    我们可以使用purrr 中的map 循环遍历listmutate 来创建'VD_z'

    library(tidyverse)
    filelist %>%
          map( ~ .x %>% 
                    mutate(VD_z = scale(VD)))
    

    或使用base Rlapply/transform

    filelist1 <- lapply(filelist, transform, VD_z = scale(VD))
    filelist1
    #[[1]]
    #  VD user VD_z
    #1  1    a   -1
    #2  2    b    0
    #3  3    c    1
    
    #[[2]]
    #  VD user VD_z
    #1  4    d   -1
    #2  5    e    0
    #3  6    f    1
    

    如果我们使用OP's post, assign thescaleto new coumn 'VD_z' and thenreturn`'df'中的逻辑

    filelist1 <- lapply(filelist, function(df) {df$VD_z <- scale(df$VD); df})
    

    【讨论】:

      【解决方案2】:

      data.table 方法可以,

      library(data.table)
      
      dd <- rbindlist(filelist, idcol = 'id')[, VD_z := scale(VD), by = id]
      #   id VD user VD_z
      #1:  1  1    a   -1
      #2:  1  2    b    0
      #3:  1  3    c    1
      #4:  2  4    d   -1
      #5:  2  5    e    0
      #6:  2  6    f    1
      

      然后您可以使用split() 将数据框拆分为列表,即

      split(dd, dd$id)
      

      给出,

      $`1`
         id VD user VD_z
      1:  1  1    a   -1
      2:  1  2    b    0
      3:  1  3    c    1
      
      $`2`
         id VD user VD_z
      1:  2  4    d   -1
      2:  2  5    e    0
      3:  2  6    f    1
      

      【讨论】:

        猜你喜欢
        • 2017-03-03
        • 1970-01-01
        • 2021-04-22
        • 2011-09-19
        • 2016-04-12
        • 2015-06-13
        • 1970-01-01
        相关资源
        最近更新 更多