揭秘R语言中tidyr unite函数:如何一键合并多个列并避免常见陷阱

R语言数据重塑核心:pivot_longer实战与 tidy data 哲学 数据重塑是R语言数据分析的基础能力,本质是将原始数据结构(如宽表)转换为符合‘整洁数据’范式的标准格式——即每行一个观测、每列一个变量。其底层原理源于tidyverse生态对向量化操作、分组聚合和图形映射的统一假设。掌握这一能力,不仅能解决ggplot2报错、dplyr分组失效等高频问题,更能提升分析可复现性与团队协作效率。典型应用场景包括销售趋势建模、多维度指标对比、生物信息RNA-seq预处理等。本文聚焦pivot_longer这一核心函数,结合真实业务数据结构,系统解析宽转长逻辑、陷阱规避与工业级落地 阅读详情

第一章:揭秘R语言中tidyr unite函数的核心作用

在数据清洗与预处理过程中,将多个列合并为一个新列是常见的操作。`tidyr::unite()` 函数正是为此设计,它能够高效地将数据框中的多个列按指定分隔符合并成单一列,极大提升数据整理的灵活性。

基本语法结构

`unite()` 函数的核心语法如下:
# 加载tidyr包
library(tidyr)

# 基本用法
unite(data, col, ..., sep = "_", remove = TRUE)
其中:
  • data:输入的数据框
  • col:生成的新列名称
  • ...:要合并的原始列名
  • sep:各列值之间的分隔符,默认为下划线
  • remove:是否在合并后删除原列,默认为TRUE

实际应用示例

假设有一个包含年、月、日三列的数据集,希望将其合并为日期格式:
df <- data.frame(
  year = 2023,
  month = 10,
  day = 5
)

df_united <- df %>%
  unite(date, year, month, day, sep = "-")

# 输出结果:
# date
# 2023-10-5

参数对比说明

参数默认值说明
sep"_"指定合并时使用的分隔字符
removeTRUE若为TRUE,则删除原始列
na.rmFALSE是否移除NA值参与合并
该函数常与 `separate()` 配合使用,构成列操作的完整闭环,在时间字段、地址拆分、类别编码等场景中表现尤为出色。

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

2.1 理解unite函数的设计理念与应用场景

设计初衷与核心思想
`unite`函数旨在将多个离散的数据流或状态源整合为统一的输出结构,提升系统模块间的耦合效率。其核心在于“合并而不失控”,通过声明式接口管理复杂输入。
典型应用场景
适用于微服务间状态聚合、前端多表单数据合并等场景。例如,在用户注册流程中整合身份信息与偏好设置:

func unite(info UserBasic, prefs UserPrefs) UnifiedProfile {
    return UnifiedProfile{
        ID:       info.ID,
        Email:    info.Email,
        Theme:    prefs.Theme,
        Language: prefs.Language,
    }
}
上述代码将两个独立结构体合并为统一视图。参数`info`和`prefs`分别代表基础信息与个性化设置,`unite`确保输出结构的一致性与完整性,降低调用方处理复杂度。

2.2 基本语法结构与参数详解

Go语言的基本语法结构简洁而高效,程序以包(package)为单位组织代码。每个Go程序至少包含一个main包和main函数。
基础程序结构
package main

import "fmt"

func main() {
    fmt.Println("Hello, World!")
}
上述代码中,package main定义了程序入口包;import "fmt"引入格式化输出包;main函数是执行起点。函数体使用花括号包裹,语句无需分号结尾。
常见参数与声明方式
  • var name type:声明变量
  • :=:短变量声明,自动推导类型
  • const:定义常量
  • func:定义函数,语法为 func name(params) returnType
这些语法元素构成了Go语言的基石,支持清晰、高效的代码编写。

2.3 单次合并两列的实践操作

在数据处理中,常需将两个相关列合并为一个逻辑字段,例如将“姓氏”与“名字”合并为“全名”。
基础合并方法
使用 Pandas 可轻松实现列的拼接。以下代码展示了字符串列的合并:
import pandas as pd

df = pd.DataFrame({
    'first_name': ['张', '李'],
    'last_name': ['三', '四']
})
df['full_name'] = df['first_name'] + df['last_name']
该操作通过向量化加法将两列字符连接,生成新列 `full_name`,适用于无缺失值场景。
处理空值的安全合并
为避免 NaN 导致结果异常,推荐使用 fillna() 预处理:
  • 先填充空值,防止传播
  • 使用 astype(str) 确保类型一致
  • 最终执行拼接操作

2.4 使用sep参数自定义分隔符的技巧

在Python的`print()`函数中,`sep`参数用于指定多个输出对象之间的分隔符,默认为空格。通过自定义`sep`,可以灵活控制输出格式。
常见分隔符应用
  • 使用逗号分隔:便于生成CSV格式数据
  • 使用制表符`\t`:对齐文本列
  • 使用空字符串:紧凑拼接无间隔内容
print("apple", "banana", "cherry", sep=", ")
# 输出:apple, banana, cherry

print("Name", "Age", "City", sep="\t")
# 输出:Name    Age     City
上述代码中,`sep=", "`将元素以逗号加空格连接,适合数据导出;而`sep="\t"`利用制表符实现字段对齐,提升可读性。合理使用`sep`能显著增强输出结构的清晰度与实用性。

2.5 忽略缺失值:na.rm参数的实际影响

在R语言中,统计函数默认对包含缺失值(NA)的数据返回NA,以警示数据质量问题。通过设置na.rm = TRUE参数,可显式指示函数忽略缺失值。
常见函数中的应用

# 示例数据
x <- c(1, 2, NA, 4, 5)

mean(x)           # 返回 NA
mean(x, na.rm = TRUE)  # 返回 3
上述代码中,mean()在未设置na.rm = TRUE时因遇到NA而中断计算;启用后则仅基于非缺失值进行平均。
参数行为对比表
函数na.rm 默认值结果(含NA时)
mean()FALSENA
sum()FALSENA
sd()FALSENA
正确使用na.rm能避免意外的NA传播,提升数据处理鲁棒性。

第三章:多列合并的进阶应用

3.1 一键合并三个及以上列的实现方法

在处理表格数据时,常需将多个文本列快速合并为一列。通过编写自动化脚本,可实现一键合并任意数量的列。
使用Python pandas实现多列合并
import pandas as pd

# 示例数据
df = pd.DataFrame({
    'A': ['a1', 'a2'],
    'B': ['b1', 'b2'],
    'C': ['c1', 'c2'],
    'D': ['d1', 'd2']
})

# 合并指定列
columns_to_merge = ['A', 'B', 'C']
df['merged'] = df[columns_to_merge].apply(lambda row: '-'.join(row.astype(str)), axis=1)
该代码通过pandas.DataFrame.apply沿行方向(axis=1)拼接指定列,使用'-'.join()以连字符连接各列值。
支持动态列选择的策略
  • 通过列表动态传入需合并的列名,提升脚本复用性
  • 使用astype(str)确保非字符串类型安全转换
  • 可替换分隔符(如空格、下划线)以适应不同场景

3.2 结合select辅助函数批量选择列名

在数据处理过程中,手动指定列名容易出错且难以维护。使用 `select` 辅助函数可实现列名的批量选择与重命名。
常用选择模式
  • starts_with("prefix"):选择以指定前缀开头的列
  • contains("text"):包含特定文本的列
  • matches(regex):匹配正则表达式的列名
代码示例

df_selected <- df %>% select(starts_with("user_"), contains("id"))
该语句从数据框 df 中筛选出列名以 "user_" 开头或包含 "id" 的所有列。函数组合提升了选择灵活性,避免逐一手动输入列名,显著提高代码可读性与维护效率。

3.3 处理日期与分类变量的合并策略

在构建时间序列模型时,常需将日期特征与分类变量进行有效融合。通过提取日期中的年、月、日、星期等信息,并与类别型字段组合,可增强模型对周期性模式的识别能力。
特征交叉示例
import pandas as pd
df['date'] = pd.to_datetime(df['date'])
df['month'] = df['date'].dt.month
df['day_of_week'] = df['date'].dt.dayofweek
df['category_date'] = df['category'].astype(str) + '_' + df['month'].astype(str)
上述代码将原始日期解析为结构化时间成分,并与分类变量拼接生成复合特征,提升模型区分度。
编码策略对比
方法适用场景优点
One-Hot Encoding低基数分类无序关系处理佳
Target Encoding高基数分类保留预测信息

第四章:常见陷阱与最佳实践

4.1 避免列类型不一致导致的合并失败

在数据合并操作中,列类型不一致是导致任务失败的常见原因。当源表与目标表的同一逻辑列使用不同数据类型(如 INT 与 VARCHAR)时,数据库引擎无法自动推断转换规则,从而引发错误。
典型错误场景
  • 整型字段与字符串字段尝试合并
  • 日期格式不统一(DATE vs DATETIME)
  • 精度差异导致数值截断
解决方案示例
SELECT 
    user_id::INTEGER,
    name::VARCHAR(50),
    login_time::TIMESTAMP
FROM staging_user_log
UNION ALL
SELECT 
    CAST(user_id AS INTEGER),
    CAST(name AS VARCHAR(50)),
    CAST(login_time AS TIMESTAMP)
FROM production_user_log;
该SQL通过显式类型转换确保各列在合并前具有一致的数据类型。::符号为PostgreSQL风格类型转换语法,CAST()函数则具备跨平台兼容性,推荐在复杂ETL流程中使用以增强可读性和可维护性。

4.2 列名冲突与重复列的预防措施

在多表关联查询或数据集成过程中,列名冲突和重复列是常见问题,可能导致数据覆盖或查询失败。为避免此类问题,应优先采用明确的列别名和限定字段引用。
使用表前缀明确字段来源
在 JOIN 操作中,始终通过表别名限定字段名:
SELECT 
    u.id AS user_id,
    o.id AS order_id,
    u.name AS user_name
FROM users u
JOIN orders o ON u.id = o.user_id;
该写法通过 表别名.列名 明确字段归属,避免同名列混淆,AS 关键字定义唯一别名,提升可读性。
自动化检测重复列
可通过元数据查询提前发现潜在冲突:
  • 查询 INFORMATION_SCHEMA.COLUMNS 分析多表共有的列名
  • 在 ETL 流程中加入列名唯一性校验步骤
  • 使用数据库视图封装复杂 JOIN,统一暴露非重复列

4.3 sep设置不当引发的数据混淆问题

在数据处理过程中,字段分隔符(sep)的配置至关重要。若设置不当,极易导致数据列错位、类型解析错误等问题。
常见sep配置错误
  • 使用默认逗号分隔符处理制表符分隔文件
  • 未转义包含分隔符的字段内容
  • 多字符分隔符未正确声明
代码示例与分析
import pandas as pd
df = pd.read_csv("data.txt", sep="\t")  # 正确指定制表符为分隔符
上述代码显式指定 sep="\t",避免将文本中的逗号误认为分隔符,确保字段边界清晰。
影响对比表
sep设置结果状态数据完整性
sep=","错误解析列错位
sep="\t"正确解析完整保留

4.4 在管道操作中安全使用unite的建议

在处理数据流管道时,unite 操作常用于合并多个字段。为确保操作安全性,应始终验证输入字段的存在性与数据类型。
避免空值引发的异常
在执行合并前,建议先进行空值检查,防止因缺失字段导致运行时错误:
// Go 语言示例:安全合并字符串字段
func safeUnite(fields ...string) string {
    var nonEmpty []string
    for _, f := range fields {
        if f != "" {
            nonEmpty = append(nonEmpty, f)
        }
    }
    return strings.Join(nonEmpty, " ")
}
上述代码通过过滤空值保障了合并的稳定性,strings.Join 确保使用指定分隔符连接有效字段。
推荐实践清单
  • 始终校验输入字段的完整性
  • 设定默认分隔符以保持输出一致性
  • 在并发环境中使用不可变数据结构

第五章:总结与高效数据重塑的延伸思考

性能优化中的实际考量
在处理大规模数据集时,数据重塑操作常成为性能瓶颈。例如,在使用Pandas进行多层透视(pivot)时,应优先考虑分块处理与内存映射策略。
  • 避免一次性加载超大数据集到内存
  • 利用 dask 实现并行化重塑操作
  • 对分类数据使用 category 类型减少内存占用
真实场景下的代码实践
以下是一个使用Dask进行高效列转行操作的示例,适用于日志类宽表处理:
import dask.dataframe as dd

# 分块读取CSV文件
df = dd.read_csv('large_log_data.csv')

# 高效melt操作,避免内存溢出
melted = df.melt(
    id_vars=['timestamp', 'server_id'],
    value_vars=[f'metric_{i}' for i in range(50)],
    var_name='metric_type',
    value_name='value'
)

# 触发计算并写回分区文件
melted.to_csv('output/melted_*.csv')
工具选型对比
不同工具在数据重塑任务中的表现差异显著,需根据场景选择:
工具适用规模内存效率并行支持
Pandas< 1GB中等否
Dask1GB - 1TB高是
Polars1GB - 100GB极高内置
未来架构设计建议
在构建ETL流水线时,应将数据重塑逻辑抽象为可复用模块,并结合Schema校验确保输出一致性。对于实时流数据,可采用Apache Beam的ParDo实现动态字段展开,提升系统弹性。
【R语言】必学包之tidyr包 tidyr用于数据处理,可以实现数据长格式和宽格式之间的相互转换,这里所指的长格式数据就是一个观测对象由多行组成,而宽数据格式则是一个观测仅由一行组成。除此之外,tidyr还可以对数据进行拆分和合并,同时也能够对缺失值进行简单的处理。tidyr的转换函数gather(宽到长)和spread(长到宽)所需参数少,逻辑上更易理解,自始至终都围绕着data,key、value三个参数来进行设定,对比其它R语言长宽格式互换的实现方式,个人认为tidyr操作性还是比较突出的。 1. gather实现wi... 阅读详情

相关推荐

R语言数据处理:tidyr包学习

在R语言中,tidyr包的应用 tidyr主要提供了一个类似Excel中数据透视表 (pivottable)的功能; gather和spread函数将数据在长格式和宽格式之间相互转化,应用在比如稀疏矩阵和稠密矩阵之间的转化; separate和union方法提供了数据分组拆分、合并的功能,应用在nominal数据的转化上 R将整洁数据定义为:每个变量的数据存储在自身的列中,每个观测值的数据存储在其自身的行中。整洁数据是进行数据再加工的基础。...

m0_56444893的博客 2969

4. 数据转换之【tidyr包】:gather与spread函数、separate与unite函数

数据转换之tidyr包:gather与spread函数、separate与unite函数

你说的白是什么白_ 1377

R语言:对R包进行unit testing

R语言:对R包进行unit testing Bioconductor给的官方unite testing介绍: BioC-unite testing 这个介绍写了三件事: how to write unit tests how to run them how they are woven into the standard Bioconductor build process 推荐...

pure小清新的博客 2733

第七天:tidyr包——unite(),separate()和replace_na()函数

tidyr包——unite(),separate()和replace_na()函数

HHHHHHHUUUYY的博客 1441

R语言tidyr包Unite()函数实战详解:多个数据列合并为一列

R语言tidyr包Unite()函数实战详解:多个数据列合并为一列 目录 R语言tidyr包Unite()函数实战详解:多个数据列合并为一列 两个数据列合并为一列 多个数据列合并为一列 tidyr包中的unite()函数可用于将多个dataframe列合并为一个列。 此函数使用以下基本语法: unite(data,col,into,sep) data:dataframe的名称 col:新生成的列的名称; …:需要合并的列的向量 sep:联合列中数据拼接的分隔符号..

data+scenario+science+insight 6067

R语言tidyr包Unite函数详解:多个数据列合并为列

你可以根据自己的需求灵活运用Unite函数来处理数据集数来处理数据集中的列合并操作。Unite函数是R语言tidyr包中的一个强大工具,用于将多个数据列合并为一列。需要注意的是,Unite函数默认会将合并前的数据列从结果中删除。可以看到,原来的姓氏和名字列被成功合并为一个新列,新列的名称为"新列名"。除了合并姓氏和名字,Unite函数还可以用于合并更多的数据列。假设我们有一个包含姓名、姓氏和名字的数据集,我们想要将姓氏和名字合并为一个新列。可以看到,除了合并姓名的姓氏和名字外,年龄列保持不变。

HackCyberX的博客 1421

R中利用unite函数进行列合并

转载地址

ToyPython的博客 4113

R语言tidyr包Unite函数实战详解:多个数据列合并为一列

通过使用Unite函数,我们可以轻松地将多个数据列合并为一列,提高数据处理的效率。上述代码将"year"、“month”、“day”、“hour”、“minute"和"second"六个数据列合并为了一个新的列"datetime”,以"-"作为分隔符。可以看到,原始数据集中的"year"、“month"和"day"三个列被合并为了一个新的列"date”,且以"-"作为分隔符。现在,我们需要将"year"、“month"和"day"这三个数据列合并为一列,并创建一个新的列名"date”。

LogicGuruX的博客 1238

彻底搞懂tidyr unite的sep参数:解决列合并混乱问题的唯一指南

轻松解决列合并混乱问题,深入解析tidyr unite的sep参数用法。涵盖分隔符设置、空值处理及多列合并场景,助你精准控制数据整合效果。掌握这一参数,提升数据清洗效率,值得收藏。

PixelStream的博客 784

别再手动测接口了!用Pytest+Requests+Allure搭建你的第一个自动化框架(附完整源码)

本文详细介绍了如何使用Pytest+Requests+Allure搭建Python接口自动化测试框架,涵盖环境准备、核心组件封装、测试用例设计、报告生成及CI/CD集成等关键步骤。通过实战案例和完整源码,帮助开发者快速构建高效的接口自动化测试解决方案,提升测试效率和质量。

weixin_42546508的博客 321

目标检测YOLO实战应用案例100讲-基于数据融合的SAR图像中海上目标检测与跟踪(中)

本文使用的数据集为欧空局(European Space Agency, ESA)提供的Sentinal-1 数据集,Sentinel-1是欧洲“哥白尼计划”的SAR卫星机群,主要是用于陆地和海 洋服务的极地轨道全天候昼夜雷达成像任务[ 34]。Sentinel-1A于2014年4月3日发 射升空,Sentinel-1B于2016年4月25日发射升空,每颗卫星都携带C波段SAR, 共同提供地球表面的全天候、昼夜图像。

qq_36130719的博客 356

揭秘R语言中dataframe合并列的隐藏函数:你不知道的dplyr与tidyr绝技

掌握r语言dataframe合并两列数据的高效方法,轻松应对数据清洗与整合场景。本文深入解析dplyr与tidyr包中的unite、mutate等函数,实现灵活列合并,提升处理效率。语法简洁、可读性强,适合各类数据分析项目,值得收藏。

CompiWander的博客 978

QGis软件 —— 2、QGis加载在线地图两种方式(谷歌地图、天地图)

QGis软件 —— 2、QGis加载在线地图两种方式(谷歌地图)

1万+

为什么你的unite合并失败了?tidyr中must参数的隐藏逻辑大曝光

掌握R语言tidyr unite合并多列的正确方法,避开常见错误。详解must参数的隐含逻辑,适用于数据清洗中多列合并场景,确保因子与缺失值处理无误。提升数据整理效率,值得收藏。

BreakVein的博客 968

★教程1:matlab学习教程入门100例目录

★基础入门 1.为什么要学习MATLAB 2.MATLAB安装 持续更新....... ★MATLAB基础编程语言熟悉

FPGA/MATLAB学习教程/源码/项目合作开发 4万+

STM32F407最小系统硬件设计与CubeMX工程实践

嵌入式最小系统是MCU功能实现的物理基础,其核心涵盖供电网络、时钟架构、复位机制与调试接口四大模块。基于Cortex-M4内核的STM32F407对电源纹波、晶振稳定性及信号完整性提出严苛要求:模拟电源VDDA需<10mV纹波,HSE晶振布线须满足短距直连与匹配电容精准配置,SWD调试接口依赖50Ω阻抗控制与端接防护。这些硬件约束直接映射至STM32CubeMX配置——如RCC时钟树参数必须与实物晶振频率严格一致,GPIO模式需匹配外设电气特性(如I2C必选开漏),否则将引发通信失败或启动异常。典型应用场景

weixin_35592186的博客 173

tidyr unite函数sep参数避坑指南:新手常犯的3大错误及正确写法

掌握tidyr unite函数sep参数的正确用法,避免数据合并常见错误。本文详解分隔符设置、空值处理及多列合并场景,总结新手易犯的3大典型问题并提供可复用代码示例,提升数据整理效率。实用技巧值得收藏。

BreakNexus的博客 928

如何离线环境下安装Dify插件 (可提供远程指导协助)

离线环境下安装Dify插件

litlit023的专栏 8100

【R语言数据清洗必杀技】:tidyr unite sep参数全解析,轻松合并列的终极指南

掌握tidyr unite sep参数,轻松解决R语言多列合并难题。适用于数据清洗中将多个变量列合并为一列的场景,详解unite函数用法与分隔符设置技巧,提升数据处理效率。方法简洁高效,值得收藏。

FuncFun的博客 786

基于Spring Boot + Vue 3构建高并发华为数码商城交易平台:全栈架构设计与实现

内容将涵盖系统架构、数据库设计、核心模块开发(用户、商品、订单、购物车)、安全认证、性能优化以及前后端分离部署等关键环节,并提供详尽的代码示例,旨在为开发者提供一个可落地的企业级项目实战指南。<el-button text class="button" @click.stop="addToCart(product)">加入购物车</el-button>.antMatchers("/api/user/login", "/api/user/register").permitAll() // 公开接口。

2201_76125393的博客 306

时序预测 | MATLAB实现NGM(1,1)多变量灰色时间序列预测

时序预测 | MATLAB实现NGM(1,1)多变量灰色时间序列预测

机器学习之心的博客,关注并私信文章链接,获取对应文章源码和数据。 1514

揭秘tidyr::unite函数中的sep参数奥秘:90%数据分析师都忽略的关键细节

掌握tidyr::unite函数中sep参数的正确用法,解决列合并时的分隔符难题。适用于数据清洗中多列合并场景,避免意外字符连接。通过实例解析sep参数设置技巧,提升数据处理效率,值得收藏。

PixelGlow的博客 667

efm32 入门.pdf

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

R语言数据重塑:从长宽格式转换到语义建模

数据重塑是数据分析的基础能力,本质是将原始物理存储映射为具备明确语义的逻辑结构。其核心原理在于区分标识变量与测量变量,通过长格式与宽格式的规范转换,支撑分组聚合、时间序列分析、多变量建模等关键任务。在R中,tidyr包的pivot_longer和pivot_wider函数取代了传统reshape2,以动词化语法实现可读、可控、可验的数据变换。掌握数据重塑不仅避免cbind/rbind引发的类型坍塌与静默错误,更能确保ggplot绘图、dplyr聚合、lm建模等下游操作稳定可靠。本文聚焦R语言实战场景,详解熔

weixin_30675247的博客 452

Statistics and Machine Learning Toolbox

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

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

如何在R语言中读取数据

转自:https://blog.youkuaiyun.com/revivre/article/details/78522840 如何在R语言中读取数据 读取数据有以下几种方式: 1.最常用的是采用读取表格数据的函数 read.table()以及read.csv().。这些函数读取一种以行列的格式存储数据的文本文件,然后在R中返回一个数据框。 2.readLines()用于逐行读取文本文件,实际上可以...

Unitue_逆流 8678

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

R语言中seq函数的用法

seq(from,to,length), 该函数的意思是生成一组

记录本 14万+

R中unique的用法

官方解释:unique&nbsp;returns a vector, data frame or array like&nbsp;x but with duplicate elements/rows removed. duplicate:完全一样的 unique主要是返回一个把重复元素或行给删除的向量、数据框或数组 举例: x &lt;- c(3:5, 11:8, 8 + 0:5) x &nbs...

整数浮点 4万+
上一篇: (pheatmap热图绘制避坑指南):新手常犯的6个错误及解决方案
下一篇: 气泡图大小总失控?教你用ggplot2实现精确映射,3步搞定!
MessyInk
博客等级 码龄11年 136粉丝 1992原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值