用dplyr across函数统一处理多列:3步实现数据预处理自动化

第一章:dplyr across 函数多列操作的核心价值

在数据处理过程中,经常需要对多个列执行相同的操作,例如标准化数值、替换缺失值或转换数据类型。传统的做法是逐列重复代码,不仅冗长而且难以维护。`dplyr::across()` 函数的引入极大简化了这一流程,允许用户在一个动词(如 `mutate()` 或 `summarise()`)中同时作用于多列,显著提升代码的简洁性与可读性。

统一处理多列的标准化操作

使用 `across()` 可以结合 `mutate()` 对所有数值型列进行标准化处理:

library(dplyr)

# 示例数据
df <- data.frame(
  id = 1:5,
  score_a = c(80, 90, 75, 85, 95),
  score_b = c(78, 88, 72, 82, 92),
  subject = c("A", "B", "A", "B", "A")
)

# 使用 across 对所有数值列进行标准化
df %>%
  mutate(across(where(is.numeric), ~ (.x - mean(.x)) / sd(.x)))
上述代码中,`where(is.numeric)` 选择所有数值型列,`~ (.x - mean(.x)) / sd(.x)` 是一个匿名函数,用于计算 z-score。`.x` 代表当前列的值。

常见应用场景归纳

  • 批量重命名列:结合 `rename_with()` 使用
  • 缺失值填充:对指定类型列统一用均值或中位数填充
  • 数据类型转换:将字符型日期列统一转为 Date 类型
  • 聚合统计:在 `summarise()` 中对多列计算均值、总和等
场景选择器常用函数
数值列标准化where(is.numeric)scale, mean, sd
字符列清理starts_with("name")str_to_upper, trimws
`across()` 的设计体现了函数式编程与数据管道思想的融合,使 R 用户能够以声明式风格高效完成复杂列操作。

第二章:across函数基础与语法解析

2.1 across函数的设计理念与适用场景

设计理念:简化跨维度数据操作
across 函数核心目标是提升数据变换的表达能力,允许在不显式循环的情况下对多个列批量应用变换逻辑。其设计遵循函数式编程原则,强调不可变性与链式调用兼容性。
典型应用场景
  • 对数据框中所有数值列进行标准化
  • 统一处理分类变量的缺失值
  • 批量重命名或类型转换

df %>% 
  mutate(across(
    where(is.numeric), 
    scale, 
    .names = "scaled_{col}"
  ))
上述代码对所有数值型列执行标准化,where(is.numeric) 定义作用范围,scale 为变换函数,.names 控制输出列名格式,实现清晰可预测的输出结构。

2.2 多列选择机制:如何精准定位目标列

在复杂数据结构中,多列选择机制是实现高效数据提取的核心。通过定义明确的列标识符,系统能够快速匹配并定位目标列。
列选择策略
支持多种选择方式:
  • 索引定位:按列位置选择(如第1、3列)
  • 名称匹配:基于列名精确或模糊匹配
  • 正则表达式:灵活匹配命名模式
代码示例:列选择实现
func SelectColumns(headers []string, selectors []string) []int {
    var indices []int
    for _, sel := range selectors {
        for i, h := range headers {
            if h == sel || regexp.MustCompile(sel).MatchString(h) {
                indices = append(indices, i)
            }
        }
    }
    return indices
}
该函数接收表头和选择器列表,返回匹配列的索引数组。支持精确匹配与正则匹配,提升灵活性。
性能对比
方法时间复杂度适用场景
索引选择O(n)固定结构数据
名称匹配O(n*m)动态列名环境

2.3 结合select辅助函数实现智能列筛选

在数据处理流程中,精准的列筛选是提升性能与可读性的关键。通过结合 `select` 辅助函数,可以动态控制输出字段,避免冗余数据传输。
智能筛选的优势
  • 减少内存占用,仅加载必要字段
  • 提升查询效率,尤其在宽表场景下效果显著
  • 增强代码可维护性,逻辑清晰易读
代码示例
func selectColumns(data []map[string]interface{}, cols ...string) []map[string]interface{} {
    var result []map[string]interface{}
    for _, row := range data {
        filtered := make(map[string]interface{})
        for _, col := range cols {
            if val, exists := row[col]; exists {
                filtered[col] = val
            }
        }
        result = append(result, filtered)
    }
    return result
}
上述函数接收数据切片与列名列表,遍历每行并构建仅包含指定列的新映射。参数 `cols ...string` 使用变参简化调用,`exists` 判断确保安全性。该模式适用于ETL预处理或API响应裁剪场景。

2.4 在mutate中使用across进行批量变换

在数据处理中,经常需要对多个变量应用相同的变换操作。`across()` 函数与 `mutate()` 结合使用,可实现对多列的批量处理,极大提升代码简洁性与可维护性。
基本语法结构

df %>% 
  mutate(across(.cols = where(is.numeric), .fns = ~ .x * 10))
该代码将数据框中所有数值型列乘以10。`.cols` 参数指定目标列,支持 `where()` 条件筛选;`.fns` 定义变换函数,支持匿名函数或函数名。
常见应用场景
  • 对所有字符型列进行去空格处理:across(where(is.character), str_trim)
  • 标准化所有数值变量:across(where(is.numeric), scale)
  • 同时应用多个函数:across(where(is.numeric), list(mean = mean, sd = sd))

2.5 在summarise中应用across生成聚合统计

在数据汇总分析中,`summarise()` 结合 `across()` 可高效实现多列批量聚合。该组合避免了重复代码,提升表达力与可维护性。
核心语法结构

df %>%
  summarise(across(
    .cols = where(is.numeric), 
    .fns = list(mean = mean, sd = sd), 
    na.rm = TRUE
  ))
上述代码对所有数值型列计算均值与标准差。`.cols` 指定目标列,支持谓词函数;`.fns` 定义应用的聚合函数,可命名输出;`na.rm = TRUE` 传递给内部函数以忽略缺失值。
应用场景示例
  • 批量标准化分组统计指标
  • 统一处理多列缺失值下的稳健聚合
  • 结合不同函数类型(如中位数、分位数)生成综合摘要

第三章:常见数据预处理任务的向量化解决方案

3.1 批量缺失值填充与类型转换

在数据预处理阶段,批量处理缺失值并统一字段类型是提升数据质量的关键步骤。面对大规模数据集,手动处理不现实,需借助自动化方法高效完成。
常见缺失值填充策略
  • 数值型字段:使用均值、中位数或前向填充
  • 类别型字段:采用众数或新增“未知”类别
  • 时间序列:支持插值或按时间对齐填充
代码实现示例
import pandas as pd
# 批量填充与类型转换
df.fillna({'age': df['age'].median(), 'gender': '未知'}, inplace=True)
df['age'] = df['age'].astype(int)
该代码段首先对 age 列用中位数填充缺失值,gender 填充为“未知”,随后将 age 显式转换为整型,确保数据一致性与后续建模兼容性。

3.2 多列标准化与归一化处理

在处理多特征数据时,不同量纲和取值范围会影响模型训练效果。因此,对多列数据进行统一的标准化(Standardization)与归一化(Normalization)至关重要。
常用方法对比
  • 标准化:将数据转换为均值为0、标准差为1的分布,适用于特征分布近似正态的情况。
  • 归一化:将数据缩放到[0,1]或[-1,1]区间,适合边界明确的数据集。
代码实现示例
from sklearn.preprocessing import StandardScaler, MinMaxScaler
import pandas as pd

# 示例数据
data = pd.DataFrame({'age': [25, 45, 35], 'salary': [50000, 80000, 60000]})

# 标准化
scaler_std = StandardScaler()
data_std = scaler_std.fit_transform(data)

# 归一化
scaler_minmax = MinMaxScaler()
data_norm = scaler_minmax.fit_transform(data)

上述代码中,StandardScaler按列计算均值与标准差并进行Z-score变换;MinMaxScaler则通过(x - min) / (max - min)公式将每列映射到指定范围。

3.3 类别变量的统一编码策略

在机器学习建模中,类别变量需转换为数值形式以供算法处理。统一编码策略确保训练与预测阶段的一致性,避免特征维度不匹配。
常见编码方法对比
  • 独热编码(One-Hot):适用于无序类别,生成二元向量;但可能引发维度爆炸。
  • 标签编码(Label Encoding):将类别映射为整数,适合有序变量,但易引入错误的顺序假设。
  • 目标编码(Target Encoding):用类别对应目标均值替换,有效但需防止数据泄露。
代码示例:使用 Pandas 实现一致化编码
import pandas as pd
from sklearn.preprocessing import OneHotEncoder

# 训练阶段拟合编码器
encoder = OneHotEncoder(sparse=False, handle_unknown='ignore')
X_train_encoded = encoder.fit_transform(df_train[['category']])

# 预测阶段直接转换
X_test_encoded = encoder.transform(df_test[['category']])

上述代码中,handle_unknown='ignore' 确保测试集中出现新类别时不会报错,提升模型鲁棒性。编码器应在训练集上拟合后复用于其他数据集,保障特征空间一致性。

第四章:进阶技巧与性能优化实践

4.1 使用条件逻辑在across中动态处理列

在数据变换过程中,dplyr 的 across() 函数支持结合条件逻辑对多列进行动态处理。通过 where() 谓词函数,可精准筛选满足特定条件的列。
条件筛选与函数应用
例如,仅对数值型且包含缺失值的列执行均值填充:

library(dplyr)

data %>%
  mutate(across(
    where(~is.numeric(.) && any(is.na(.))), 
    ~replace_na(., mean(., na.rm = TRUE))
  ))
上述代码中,where() 接收一个匿名函数,判断每列是否为数值型且存在缺失值;replace_na() 则对符合条件的列用其均值填充 NA。
应用场景扩展
  • 批量标准化连续变量
  • 对特定模式命名的列应用正则过滤
  • 结合 ifelse() 实现复杂逻辑分支

4.2 结合group_by实现分组下的多列操作

在数据处理中,常需按某一字段分组后对多个列执行聚合操作。通过 `group_by` 与多列函数结合,可高效实现此类需求。
基础语法结构
df.groupby('category')[['sales', 'profit']].agg(['sum', 'mean'])
该代码按 "category" 分组,对 "sales" 和 "profit" 两列分别计算总和与均值。`agg()` 支持传入函数列表,实现多指标聚合。
自定义多列函数应用
使用 `apply` 可定义更复杂的跨列逻辑:
def profit_margin(group):
    return (group['sales'].sum() - group['cost'].sum()) / group['sales'].sum()

df.groupby('region').apply(profit_margin)
此例中,每个分组独立计算利润率,体现 `group_by` 与多列运算的深度结合。

4.3 自定义函数封装提升代码复用性

在开发过程中,重复代码会降低可维护性。通过自定义函数封装通用逻辑,可显著提升代码复用性与可读性。
函数封装示例
func CalculateArea(length, width float64) float64 {
    // 参数:length 长方形长度,width 宽度
    // 返回值:面积计算结果
    return length * width
}
该函数将长方形面积计算逻辑抽象出来,避免在多处重复编写相同表达式。
优势分析
  • 减少代码冗余,修改只需一处更新
  • 增强语义表达,提升团队协作效率
  • 便于单元测试,提高程序健壮性
合理封装还能结合配置参数扩展功能,实现更灵活的业务适配。

4.4 避免常见错误与性能瓶颈调优

减少不必要的对象创建
频繁的对象分配会加重 GC 压力,尤其在高并发场景下。应优先复用对象或使用对象池。
var bufferPool = sync.Pool{
    New: func() interface{} {
        return new(bytes.Buffer)
    },
}

func process(data []byte) *bytes.Buffer {
    buf := bufferPool.Get().(*bytes.Buffer)
    buf.Reset()
    buf.Write(data)
    return buf
}
上述代码通过 sync.Pool 复用 bytes.Buffer 实例,降低内存分配频率。每次获取前调用 Reset() 清除旧状态,确保安全性。
避免锁竞争
过度使用互斥锁会导致 goroutine 阻塞。可采用读写锁或原子操作优化。
  • 读多写少场景使用 sync.RWMutex
  • 计数器类操作优先使用 atomic 包
  • 拆分热点数据,降低锁粒度

第五章:从自动化到可扩展的数据管道构建

设计高可用的数据摄取流程
现代数据系统要求管道具备容错与弹性伸缩能力。以 Kafka 为例,通过分区和副本机制实现横向扩展与故障转移。以下为消费者组配置示例:

config := kafka.ConfigMap{
    "bootstrap.servers": "kafka-broker:9092",
    "group.id":          "data-pipeline-group",
    "auto.offset.reset": "earliest",
    "enable.auto.commit": false,
}
该配置确保多个实例负载均衡处理消息,并支持手动提交偏移量以实现精确一次语义。
动态扩展的处理架构
使用 Kubernetes 部署 Spark Streaming 作业时,可根据背压自动调整 Executor 数量。关键参数如下:
  • spark.dynamicAllocation.enabled=true
  • spark.streaming.backpressure.enabled=true
  • spark.executor.instances 设置初始值并允许向上扩容
此模式已在某电商平台实时订单分析中落地,日均处理 2.3TB 数据,峰值吞吐达 18,000 条/秒。
监控与反馈闭环
构建可观测性体系是保障稳定性的重要环节。下表展示核心监控指标:
指标名称采集方式告警阈值
端到端延迟Prometheus + Micrometer>5分钟
消费滞后(Lag)Kafka Lag Exporter>10万条
[Source] → [Kafka] → [Spark Streaming] → [Data Warehouse] → [BI Tool] ↑ ↓ [Metrics] [Checkpoint Storage]
【WorkBuddy专栏68】HY3绕路部署vsDS4直击根因——一次真实踩坑揭露两个AI模型的推理差距 阅读详情

相关推荐

Unipush2.0 App消息推送(在线+离线推送)

使用unipush2.0进行消息推送,包含在线跟离线

weixin_50251467的博客 3699

掌握dplyr的across函数,5分钟搞定数据预处理难题

快速掌握dplyr的across函数多列操作,高效解决数据清洗难题。适用于批量处理数值转换、缺失值填充等场景,结合select辅助函数精准定位列,代码简洁易读。提升R语言数据预处理效率,值得收藏。

FuncTide的博客 702

Cadence IC618与Spectre231安装配置全攻略:License、环境变量与依赖检查

EDA工具部署中,License管理与环境变量隔离是核心难点。FlexLM作为通用授权机制,通过守护进程和端口配置实现工具授权;环境变量则控制工具路径与库加载顺序,避免版本冲突。合理配置可确保IC618与Spectre231稳定运行,提升仿真效率。典型应用场景包括模拟IC设计、高校实验室及企业级EDA环境。本文聚焦Cadence IC618与Spectre231的安装实践,详解License配置、环境隔离及依赖检查,助你快速搭建可靠设计环境。

weixin_28721917的博客 324

【dplyr across函数高效指南】:掌握多列操作的5大核心技巧

掌握dplyr的across函数多列操作,轻松实现高效数据处理。适用于批量修改、条件筛选与函数应用,结合mutate、summarise等场景,提升代码简洁性与执行效率。5大技巧助你灵活应对复杂数据任务,值得收藏。

SimProceed的博客 1002

【Azure 架构师学习笔记】- Azure Databricks (1) - 环境搭建

Databricks 已经成为了数据科学的必备工具,今时今日你已经很难抛开它来谈大数据,它常用于做复杂的ETL中的T, 数据分析,数据挖掘等,特别适用于做数据建模,机器学习等。那么顺应时代,现在也来看看这个工具的内容。首先要有一个环境,基于Azure 的Databricks简称ADB。托管在Azure 上的Databricks已经被Azure进行了很大的优化, 在搭建时只需要简单的几步即可拥有一个环境,不过要提醒一句ADB的集群并不便宜,用完马上删掉或停止, 否则一晚过百美金就会烧掉。

MVP黄钊吉(發糞塗牆) 2298

CTF命令执行绕过实战:从空格过滤到无回显外带的7种核心姿势

命令执行漏洞是Web安全中的常见高危漏洞,其核心原理在于应用程序未对用户输入进行充分过滤,导致攻击者能够注入并执行系统命令。在真实环境中,安全防护措施(如WAF、输入过滤函数)普遍存在,因此漏洞利用的关键技术在于“绕过”这些过滤机制。理解过滤器的运作逻辑(如黑名单、白名单、转义、长度限制)是成功绕过的前提。通过系统学习**空格绕过**、**命令黑名单绕过**、**编码混淆**等基础技巧,并结合**无回显外带**、**反弹Shell**等高级利用链,安全研究人员能够有效应对复杂防护场景。本文以CTFshow

weixin_29315091的博客 370

揭秘dplyr中的across函数:如何一键处理数十列数据?

掌握dplyr的across函数多列操作,轻松实现批量数据处理。适用于数据清洗、转换与汇总场景,结合select语法一键对数十列应用函数,大幅提升效率。代码简洁易读,兼容管道操作,是R语言数据处理的利器。值得收藏

SimCompile的博客 639

别再用Excel画波特图了!用LTspice免费仿真软件,5分钟搞定电路传递函数分析

本文介绍了如何利用LTspice免费仿真软件高效绘制波特图,解决传统Excel绘图效率低、精度不足的问题。通过详细的操作步骤和实战案例,展示LTspice在电路传递函数分析中的自动化计算、专业级精度和完整特性展示等优势,帮助工程师快速完成频率响应分析。

weixin_42524226的博客 461

dplyr across函数全解析:从入门到精通的3个关键阶段

掌握dplyr的across函数多列操作,高效解决R语言数据清洗难题。适用于批量处理数值型、字符型变量,结合select辅助函数精准定位列,提升代码简洁性与可读性。三大进阶技巧助你灵活应对复杂场景,值得收藏。

AlgoInk的博客 693

【一看就会】autoware universe项目结构解析——从一层一层直到control源码

下载安装autoware universe花了一天。下载好之后,按照网上说的跑了一下仿真是能跑的,证明下的代码没问题。然后就得看一下各模块实现的源码了。但是当我打开这些文件的时候。我勒个豆。这么多是个玩意儿。我连该启动哪个launch文件,哪个文件夹是干啥的都不知道。在我慢慢弄懂之后,我也记录这个庞大的项目的各个文件夹和里面的文件以及项目,以及自己使用时应该启动哪些launch文件。这篇文章目的就是通过找到control部分的源码,来帮助我们梳理这个庞大项目的各个文件的功能。

weixin_48386130的博客 2037

32、社交媒体大数据中的情感分析与网络欺凌检测

本文探讨了社交媒体大数据在情感分析和网络欺凌检测中的应用。情感分析有助于应对自动化带来的社会变化、促进社会包容和推动环境保护。网络欺凌作为一种严重的在线危害,其检测依赖于数据预处理、特征提取与深度学习模型(如CNN、LSTM)进行分类。文章还总结了大数据在欺诈检测、医疗、制造、交通等领域的广泛应用,并分析了数据存储、处理速度、质量和技术工具等方面的挑战,提出了相应的应对策略。未来,随着技术进步,社交媒体大数据将在更多领域发挥关键作用。

cc789的博客 91

告别低效循环,dplyr across函数让多列处理提速10倍

掌握dplyr across函数多列操作技巧,告别低效循环。适用于数据清洗、批量转换等场景,结合mutate与across实现高效列处理,代码简洁且运行速度快,提升R语言数据处理效率10倍以上,值得收藏。

IterStream的博客 425

EtherCAT总线运动控制学习笔记(RXXW_Dor)

说到总线控制,就要说到报文、对象字典、PN通信我们大部分会说报文,EtherCAT通信我们常说对象字典,叫法不一样,但是原理基本一致,下面我们简单认识下上面是对象字典。

RXXW_Dor的博客 5428

告别低效循环,dplyr across让你秒级完成多列转换,90%的人都用错了!

掌握dplyr across函数多列操作技巧,高效批量处理数据转换。适用于数据清洗、标准化等场景,结合mutate与across实现秒级多列计算,告别冗余循环。代码简洁易维护,90%用户忽略的关键用法解析,值得收藏。

CompiGlow的博客 538

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

【R语言高手进阶】:across函数在dplyr中的7种高阶用法

掌握dplyr的across函数多列操作技巧,高效解决批量数据处理难题。涵盖条件筛选、函数组合、列类型转换等7种高阶用法,提升代码简洁性与执行效率。适用于数据清洗、特征工程等场景,值得收藏。

PixelGlow的博客 879

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

数据清洗提速10倍,你不知道的across多列操作秘密

掌握dplyr的across函数多列操作技巧,轻松实现数据清洗效率提升10倍。适用于批量标准化、缺失值处理等场景,结合select辅助函数精准定位目标列,代码简洁高效。数据预处理必备技能,值得收藏。

VarChat的博客 616

dplyr across函数实战精要(多列操作终极解决方案)

掌握dplyr across函数多列操作,高效批量处理数据列。适用于数据清洗、转换与汇总场景,结合select风格语法,实现简洁、可读性强的代码。支持条件筛选与函数映射,大幅提升数据操作效率。dplyr across函数多列操作终极指南,值得收藏

LearnPlex的博客 276

【R语言数据清洗提速秘籍】:用dplyr across实现批量列操作的黄金法则

掌握dplyr across函数多列操作,高效实现R语言数据清洗批量处理。适用于多列类型转换、缺失值填充与统一计算,一行代码替代循环,大幅提升效率。语法简洁安全,值得收藏。

VarIsle的博客 1053

揭秘dplyr across函数:如何一键完成10+列数据转换

掌握dplyr across函数多列操作技巧,轻松实现批量数据转换。适用于数据清洗、标准化等场景,一行代码处理10+列,提升效率。结合mutate与across,灵活应用函数,告别重复代码。值得收藏

ProceNest的博客 374

如何用dplyr快速实现多列降序排列?揭秘arrange(desc())的4大应用场景

掌握dplyr arrange desc 排序技巧,快速实现多列降序排列。详解arrange(desc())在数据清洗、排名统计、分组排序和结果展示中的四大应用场景,操作简洁高效,提升R语言数据处理效率,值得收藏。

QuickTrans的博客 1043

dplyr排序艺术:arrange函数的完整教程

掌握数据排序是数据分析的基础技能,而R语言中dplyr包的arrange函数正是实现这一目标的终极工具。无论你是数据分析新手还是资深R用户,这篇完整指南将带你深入了解arrange的强大功能。 dplyr是R语言中最流行的数据处理包之一,而arrange函数作为其核心排序工具,能够以简单直观的方式对数据框进行排序操作。在前100字的介绍中,让我们明确arrange函数的核心价值:它通过列值对数据

gitblog_00947的博客 1303

dplyr across使用陷阱与最佳实践(99%新手忽略的关键细节)

掌握dplyr across函数多列操作的核心技巧,避开99%新手常犯的陷阱。详解适用场景、语法结构与常见错误,提升数据处理效率。涵盖select风格选择、函数应用一致性等关键细节,值得收藏。

CodeNexus的博客 905

【dplyr高手进阶必备】:一次性输出n个统计量的优雅写法曝光

掌握R语言dplyr summarize多统计量的优雅写法,轻松实现分组数据一键汇总。适用于数据清洗与报表生成,利用across结合自定义函数同时输出均值、标准差等多指标,代码简洁高效。提升数据分析效率的必备技巧,值得收藏。

LogicPlex的博客 826

dplyr | 提高数据处理效率!数据框的colwise和rowwise操作

前置推文:dplyr | 数据导入和预处理的常用函数前面介绍了dplyr工具包中一些用于数据处理的常用函数,在处理的变量较少时,可以在相应的函数中逐个写入变量名,但当变量过多时,就需要寻求...

R语言学堂 3678

告别低效循环!across函数实现批量列操作的4种模式

掌握dplyr的across函数多列操作,告别繁琐循环。支持按类型、名称筛选列,统一应用函数,提升数据清洗效率。适用于批量标准化、缺失值处理等场景,语法简洁高效,值得收藏。

LogicNest的博客 634

掌握这5种dplyr排序模式,让你的数据处理速度飙升(含desc实战案例)

掌握dplyr排序技巧,高效处理数据不再难。本文详解5种常用排序模式,涵盖dplyr arrange desc 排序在数据降序排列中的实战应用,适用于数据清洗与分析场景,提升处理效率。方法简单易用,值得收藏。

LiteProceed的博客 970

dplyr排序从入门到精通,彻底搞懂arrange与desc嵌套逻辑

掌握dplyr arrange desc 排序技巧,轻松实现数据多条件逆序排列。详解arrange与desc嵌套逻辑,适用于分组排序、缺失值处理等场景,提升数据整理效率。语法清晰、操作灵活,R语言数据处理必备技能,值得收藏。

GatherLume的博客 1010
上一篇: Laravel数据库种子艺术(从零到精通假数据注入)
下一篇: 从零构建可复用的点击计数模块,R Shiny高级开发必备技能(仅限内部分享)
QuickSolve
博客等级 码龄1年 137粉丝 2015原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值