【问题标题】:creating column names using paste0() inside an lapply() in R在 R 中的 lapply() 中使用 paste0() 创建列名
【发布时间】:2020-09-09 08:17:12
【问题描述】:

我有一些数据:

myData <- mtcars %>%
  group_by(cyl) %>%
  group_map(~ head(.x, 5L))

我正在使用 lapply 函数进行转换

myDataNew <- lapply(myData, function(x) {
   x <- transform(x, ratio = hp/gear)
   x <- filter(x, !carb == 2)
})

一切正常且符合预期。但是我想给出不同的列名,这样每个新创建的列名都会有“一个标志”。

flag <- "calculation1"
myDataNew <- lapply(myData, function(x, flag) {
   x <- transform(x, paste0("ratio-", flag) = hp/gear)
   x <- filter(x, !carb == 2)
})

在这里我了解到 paste0() 函数在 lapply() 中不起作用。我怎样才能达到预期的结果:

myDataNew
[[1]]
   mpg  disp hp drat   wt  qsec vs am gear carb ratio-calculation1
1 22.8 108.0 93 3.85 2.32 18.61  1  1    4    1 23.25
2 32.4  78.7 66 4.08 2.20 19.47  1  1    4    1 16.50

[[2]]
   mpg  disp  hp drat    wt  qsec vs am gear carb    ratio-calculation1
1 21.0 160.0 110 3.90 2.620 16.46  0  1    4    4 27.50000
2 21.0 160.0 110 3.90 2.875 17.02  0  1    4    4 27.50000
3 21.4 258.0 110 3.08 3.215 19.44  1  0    3    1 36.66667
4 18.1 225.0 105 2.76 3.460 20.22  1  0    3    1 35.00000
5 19.2 167.6 123 3.92 3.440 18.30  1  0    4    4 30.75000

[[3]]
   mpg  disp  hp drat   wt  qsec vs am gear carb    ratio-calculation1
1 14.3 360.0 245 3.21 3.57 15.84  0  0    3    4 81.66667
2 16.4 275.8 180 3.07 4.07 17.40  0  0    3    3 60.00000
3 17.3 275.8 180 3.07 3.73 17.60  0  0    3    3 60.00000
4 15.2 275.8 180 3.07 3.78 18.00  0  0    3    3 60.00000

【问题讨论】:

  • 为什么paste0() 不能在lapply() 中工作?为什么这个标签是data.table
  • 您好,如果我的回答解决了您的问题,请考虑接受。谢谢。

标签: r lapply tibble


【解决方案1】:

您正在混合基础 R 和 dplyr

要在dplyr 中执行此操作,请使用:

library(dplyr)
library(rlang)

lapply(myData, function(x) {
  x %>%
    mutate(!!paste0("ratio-", flag) := hp/gear) %>%
    filter(carb != 2)
})

或者将其保存在基础 R 中:

lapply(myData, function(x) {
  x[[paste0("ratio-", flag)]] = x$hp/x$gear
  subset(x, carb != 2)
})

【讨论】:

    猜你喜欢
    • 2014-03-09
    • 2014-11-09
    • 2020-09-20
    • 2019-08-13
    • 2018-11-19
    • 1970-01-01
    • 2020-04-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多