r - 在 R 中的 lapply() 中使用 paste0() 创建列名
问题描述
我有一些数据:
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
解决方案
您正在混合基础 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)
})
推荐阅读
- html - 使用相对属性的类不正确
- apache-kafka - 将Kafka 0.8.2.1集群中的数据镜像到Kafka 2.2.0集群
- python - Keras LSTM 问题,如何正确设置时间序列的神经网络?
- python - 使用正则表达式过滤 DataFrame 列
- sql - SQL Server 使用预定义的顺序进行排序
- python - Python连接mySQL数据库写入文本文件
- java - com.microsoft.sqlserver.jdbc.SQLServerException:无效的对象名称'事实;
- php - 如何为不是来自浏览器的 HTTP 请求触发 Xdebug
- imagemagick - 如何解决此问题“gs:符号查找错误:/usr/lib/x86_64-linux-gnu/libgs.so.9:未定义符号:FT_Property_Set”
- sql-server - SqlServer 的版本控制