r - 使用 mutate 和 lapply 简化语法
问题描述
我有创建新数据框 df2 的代码,它是现有数据框 df 的副本,但有四个新列 a、b、c、d。这些列的值由它们自己的函数给出。
下面的代码按预期工作,但似乎重复。有没有更简洁的形式可以推荐?
df2 <- df %>% mutate(a = lapply(df[,c("value")], f_a),
b = lapply(df[,c("value")], f_b),
c = lapply(df[,c("value")], f_c),
d = lapply(df[,c("value")], f_d)
)
“值”列中的单元格内容示例"-0.57(-0.88 to -0.26)"
。我正在应用一个函数来提取第一个数字:
f_a <- function(x){
substring(x, 1, regexpr("\\(", x)[1] - 1)
}
这适用于单个字符串(示例中的 -0.57)时效果很好。在数据框中,我发现 lapply 根据“值”列中任何单元格的输入给出了正确的值。该代码似乎有点重复,但有效。
解决方案
我们可以用map
library(tidyverse)
df[c('a', 'b', 'c', d')] <- map(list(f_a, f_b, f_c, f_d), ~ lapply(df$value, .x))
注意:没有功能或示例,不清楚这是否是最佳解决方案。此外,正如评论中所指出的,许多功能可以直接应用于列,而不是循环遍历每个元素。
推荐阅读
- php - 用php和mysqli建表的流程是什么?
- java - 异常 android.graphics.BaseCanvas.onHwBitmapInSwMode
- c++ - fread 正在向后存储二进制文件
- perl - 从 cgi 文件重定向到 WHM 中的另一个 cgi 文件
- python-3.x - Twilio-Python:多个 Resonse 选项
- python - 如何在不连接到 Launch Darkly 的情况下模拟功能切换?
- json - 在执行单元测试用例时导入 json 文件 Create React App
- android - ORMLite Android Sub查询使用多个值的过滤器项目
- node.js - 线程池大小到可用内核数
- sql-server - 需要创建重复索引以使查询更快