【R语言数据重塑终极指南】:pivot_wider中values_fn的5大应用场景揭秘

第一章:理解pivot_wider中values_fn的核心机制

在数据重塑操作中,pivot_wider 是 tidyr 包提供的强大函数,用于将长格式数据转换为宽格式。当多个值对应同一组键时,values_fn 参数决定了如何聚合这些重复值,是控制数据转换行为的关键。

values_fn 的基本作用

values_fn 允许用户指定一个函数,用于处理分组后可能出现的多个值。默认情况下,若未设置该参数且存在重复项,pivot_wider 会抛出错误。通过自定义函数,可以实现求和、取均值、计数等聚合逻辑。

常见聚合策略示例

以下代码展示了如何使用不同聚合函数处理重复值:


library(tidyr)
library(dplyr)

# 示例数据
data <- tibble(
  name = c("Alice", "Alice", "Bob", "Bob"),
  subject = c("Math", "Math", "English", "English"),
  score = c(85, 90, 78, 82)
)

# 使用 mean 聚合重复值
data_pivoted <- pivot_wider(
  data,
  names_from = subject,
  values_from = score,
  values_fn = list(score = mean)  # 对 score 列应用均值函数
)

上述代码中,values_fn = list(score = mean) 表示对 score 字段按组计算平均值,避免因重复而报错。

支持的函数类型

  • mean:计算数值的平均值
  • sum:对重复值求和
  • length:统计每组记录数量(可用于计数)
  • 自定义函数:如 ~ paste(.x, collapse = ", ") 可将多值拼接为字符串

聚合策略对比表

函数用途适用场景
mean计算平均值重复测量数据汇总
sum求和累计指标(如销售额)
length计数频次统计

第二章:处理重复值的聚合场景

2.1 理论解析:为何需要values_fn处理重复键

在数据聚合场景中,多个源可能上报相同键(key),导致键冲突。若不加处理,后写入的值将覆盖先前值,造成数据丢失。
重复键带来的问题
当多个配置项使用相同键时,例如:
// 假设有如下键值对输入
inputs := []KeyValue{
    {"timeout", 30},
    {"timeout", 60}, // 重复键
}
直接存储会丢失其中一个值,无法反映完整意图。
values_fn 的作用机制
通过提供 values_fn 回调函数,允许用户自定义合并策略。常见处理方式包括取最大值、求和或保留列表:
  • 取最大值:适用于超时配置等场景
  • 拼接为切片:保留所有原始数据
  • 加权平均:用于指标类数据融合
该机制提升了键值系统在复杂环境下的鲁棒性与灵活性。

2.2 实战演示:使用mean汇总重复观测值

在数据清洗过程中,处理重复观测值是关键步骤之一。使用均值(mean)进行汇总是一种常见且有效的策略,尤其适用于数值型变量。
操作流程
  • 识别具有重复键的行
  • 按分组键聚合数据
  • 对数值列计算均值
代码实现
import pandas as pd

# 构造含重复键的数据
data = pd.DataFrame({
    'id': [1, 2, 2, 3],
    'value': [10, 15, 25, 30]
})

# 按id分组并取均值
result = data.groupby('id').mean()
上述代码中,groupby('id') 将相同 id 的记录归为一组,mean() 对每组的数值列求平均值。最终,id=2 的两条记录 value 值 15 和 25 被合并为 20,有效减少了冗余数据并保留了数值趋势。

2.3 多函数应用:同时返回均值与计数

在数据分析中,常需同时获取数据的统计均值与元素数量。通过封装多返回值函数,可高效实现这一需求。
函数设计思路
将计算逻辑集中于单一函数,返回均值和计数两个值,避免重复遍历数据。
func meanAndCount(data []float64) (float64, int) {
    if len(data) == 0 {
        return 0.0, 0
    }
    var sum float64
    for _, v := range data {
        sum += v
    }
    return sum / float64(len(data)), len(data)
}
上述代码中,meanAndCount 接收浮点切片,遍历一次完成求和与计数,返回均值及总个数。时间复杂度为 O(n),空间复杂度为 O(1)。
调用示例与输出
  • 输入:[]float64{1.0, 2.0, 3.0, 4.0}
  • 输出:均值 = 2.5,计数 = 4

2.4 自定义函数:基于条件逻辑的聚合策略

在复杂数据处理场景中,标准聚合函数往往难以满足业务需求。通过自定义聚合函数引入条件逻辑,可实现灵活的数据归约策略。
条件聚合的实现方式
使用高阶函数封装条件判断,结合 reduce 模式完成聚合。例如在 JavaScript 中:

function conditionalAggregate(data, condition, aggregator) {
  return data.filter(condition).reduce(aggregator, 0);
}
// 示例:对金额大于100的订单求和
const total = conditionalAggregate(
  orders, 
  item => item.amount > 100,
  (sum, item) => sum + item.amount
);
上述函数接收数据集、条件函数和聚合逻辑三部分参数,增强了复用性。
应用场景对比
场景条件逻辑聚合目标
异常值统计value > threshold计数
分层汇总level === 'high'加权平均

2.5 边界情况:缺失值与极端重复结构的应对

在数据处理中,缺失值和极端重复结构是影响模型稳定性的关键边界问题。合理策略可显著提升系统鲁棒性。
缺失值填充策略
常见的填充方法包括均值、前向填充及模型预测。对于时间序列场景,前向填充更符合逻辑连续性:

# 使用前向填充处理缺失值
df['value'].fillna(method='ffill', inplace=True)
该方法将上一个有效值延展至当前缺失位置,适用于高频率采样且变化平缓的数据流。
极端重复结构识别
重复模式可能导致过拟合或资源浪费。可通过哈希滑动窗口检测:
  • 设定窗口大小与重叠阈值
  • 对连续块计算SHA-256哈希值
  • 统计哈希碰撞频率以识别异常重复
策略适用场景计算开销
前向填充时间序列低
哈希去重文本/日志结构中

第三章:数据类型转换与格式化输出

3.1 理论基础:values_fn在类型重塑中的角色

在数据处理流水线中,`values_fn` 扮演着关键的类型转换与结构映射角色。它作为高阶函数接收原始数据并返回目标类型的实例,实现灵活的类型重塑。
核心机制解析
func values_fn(input interface{}) interface{} {
    switch v := input.(type) {
    case string:
        return len(v) // 字符串转为其长度
    case []int:
        return sum(v) // 整型切片转为总和
    }
}
上述代码展示了 `values_fn` 如何根据输入类型执行不同的转换逻辑。参数 `input` 接受任意类型,通过类型断言分支处理,输出重新塑造后的值。
应用场景归纳
  • ETL流程中的字段标准化
  • API响应数据的结构适配
  • 配置项动态求值

3.2 实战示例:将数值转为字符型标签

在机器学习与数据预处理中,常需将连续或离散的数值映射为更具语义的字符型标签。例如,将成绩分数划分为“优秀”、“良好”、“及格”和“不及格”。
定义映射规则
可通过简单的条件逻辑实现转换。以下为 Python 示例代码:
def numeric_to_label(score):
    if score >= 90:
        return "优秀"
    elif score >= 80:
        return "良好"
    elif score >= 60:
        return "及格"
    else:
        return "不及格"

# 批量转换
scores = [95, 82, 58, 76]
labels = [numeric_to_label(s) for s in scores]
print(labels)  # 输出: ['优秀', '良好', '不及格', '良好']
该函数依据预设阈值逐项判断,适用于小规模数据处理。
使用向量化操作提升效率
对于大规模数据,推荐使用 Pandas 的 cut 函数进行向量化转换:
import pandas as pd

df = pd.DataFrame({'score': [95, 82, 58, 76]})
bins = [0, 60, 80, 90, 100]
labels = ['不及格', '及格', '良好', '优秀']
df['grade'] = pd.cut(df['score'], bins=bins, labels=labels, right=False)
pd.cut 将数值按区间划分,right=False 表示左闭右开区间,确保边界清晰。

3.3 高级技巧:日期格式与因子水平统一化

在数据预处理中,确保日期格式和因子变量的统一性对建模至关重要。不一致的格式会导致分组错误或时间序列分析失效。
标准化日期格式
使用 as.Date() 统一不同来源的日期格式:

# 将多种格式转换为标准日期
data$date <- as.Date(data$date, format = "%Y-%m-%d")
data$alt_date <- as.Date(data$alt_date, format = "%d/%m/%Y")
format 参数指定原始字符串的结构,避免解析错误。
因子水平一致性控制
确保训练集与测试集中因子水平一致:
  • 使用 factor() 显式定义 levels
  • 防止新数据引入未知水平导致模型报错

data$category <- factor(data$category, levels = c("low", "medium", "high"))
该方法强制保留预设类别顺序,提升模型解释性。

第四章:增强数据可读性与业务适配性

4.1 理论指导:如何通过values_fn提升报表可读性

在数据报表开发中,原始数值往往缺乏语义表达,影响用户理解。`values_fn` 是一种函数式工具,用于对单元格值进行动态格式化,从而增强可读性。
基本使用方式
const formattedData = table.render({
  values_fn: (value, field) => {
    if (field === 'rate') return (value * 100).toFixed(2) + '%';
    if (field === 'amount') return '$' + parseFloat(value).toLocaleString();
    return value;
  }
});
该函数接收原始值与字段名,返回格式化后的内容。例如将 0.875 转换为“87.50%”,或将 12345 显示为“$12,345”。
应用场景列表
  • 数值单位转换(如 KB → MB)
  • 日期时间本地化显示
  • 敏感数据脱敏处理
  • 状态码映射为可读文本(如 1 → “已激活”)
通过合理配置 `values_fn`,可在不修改源数据的前提下,显著提升报表的直观性与用户体验。

4.2 实战操作:生成带单位或百分比符号的字段

在数据展示场景中,数值字段常需附加单位或百分比符号以提升可读性。通过格式化函数可实现这一需求。
使用 JavaScript 格式化数值

function formatWithUnit(value, unit = '') {
  return `${value}${unit}`;
}

function formatPercent(decimal) {
  return `${(decimal * 100).toFixed(2)}%`;
}

// 示例调用
console.log(formatWithUnit(25, '℃'));     // 输出: 25℃
console.log(formatPercent(0.87));         // 输出: 87.00%
上述代码定义了两个格式化函数:`formatWithUnit` 用于附加任意单位,`formatPercent` 将小数转换为保留两位小数的百分比字符串。
常见格式化场景对照表
原始值目标格式调用方式
36.536.5℃formatWithUnit(36.5, '℃')
0.9595.00%formatPercent(0.95)

4.3 业务映射:用命名列表实现分类重编码

在数据预处理中,分类变量常需转换为更具业务含义的编码。命名列表提供了一种清晰的映射机制,将原始值重编码为语义一致的标签。
映射结构设计
使用命名列表可定义类别与新标签之间的对应关系,提升代码可读性与维护性。

# R语言示例:使用命名向量进行重编码
category_map <- c(
  "A" = "High_Value",
  "B" = "Medium_Value",
  "C" = "Low_Value"
)
df$segment <- category_map[df$level]
上述代码通过命名向量 category_map 将原始等级 A/B/C 映射为业务语义标签。索引操作自动匹配名称,实现向量化重编码,效率高且逻辑清晰。
优势分析
  • 避免硬编码,增强可维护性
  • 支持多层级业务规则扩展
  • 便于与配置文件集成,实现动态更新

4.4 组合策略:结合dplyr管道优化输出结构

在数据处理流程中,使用 `dplyr` 的管道操作符 `%>%` 能显著提升代码可读性与执行效率。通过链式调用,可将多个数据转换步骤无缝衔接。
常见管道组合操作
  • filter():筛选符合条件的行
  • select():选择特定列
  • mutate():新增或修改变量
  • summarize():聚合统计

library(dplyr)

data %>%
  filter(age >= 18) %>%
  select(name, age, income) %>%
  mutate(income_per_capita = income / age) %>%
  group_by(age) %>%
  summarize(avg_income = mean(income_per_capita, na.rm = TRUE))
上述代码首先筛选成年人群,选取关键字段并构造新变量,最后按年龄分组计算平均人均收入。管道机制避免了中间变量的生成,使数据流转逻辑清晰,结构紧凑,便于维护和调试。

第五章:总结与最佳实践建议

性能监控与调优策略
在高并发系统中,持续的性能监控至关重要。推荐使用 Prometheus + Grafana 组合进行指标采集与可视化,重点关注 QPS、延迟分布和内存分配速率。
指标健康阈值监控工具
平均响应时间< 200msPrometheus
GC暂停时间< 50msGo pprof
代码层面的优化实践
避免在热路径中频繁创建临时对象。以下为优化前后的对比示例:

// 优化前:每次调用都分配新 slice
func Process(data []byte) []byte {
    return append([]byte{}, data...)
}

// 优化后:使用 sync.Pool 复用缓冲区
var bufferPool = sync.Pool{
    New: func() interface{} { return make([]byte, 0, 1024) },
}

func Process(data []byte) []byte {
    buf := bufferPool.Get().([]byte)
    buf = append(buf[:0], data...)
    // 使用完毕后归还
    defer bufferPool.Put(buf)
    return append([]byte{}, buf...)
}
部署与配置管理
  • 使用环境变量分离配置,避免硬编码数据库连接信息
  • 实施蓝绿部署策略,确保零停机发布
  • 对敏感配置启用加密存储(如 Hashicorp Vault)
Client Load Balancer Server v1 Server v2
R语言笔记-数据框长宽格式转换 文章目录长格式与宽格式整洁数据集的要求使用基本包进行转换:``reshape()``长转宽宽转长使用``tidyr``包进行转换长转宽:``pivot_wider()``宽转长:``pivot_longer()`` 长格式与宽格式 长格式 (long form):一行代表一次观测,对一个对象不同时刻的观测分布在不同的行之中 例如,共有m个对象,每个对象都在n个不同的时刻进行观测,共产生的mn个观测值以长格式记录如下 subject timepoint value 111 t1t_1 阅读详情

相关推荐

R语言中的pivot_wider函数:数据表变换

我们的目标是将数据从长格式转换为宽格式,以便每个学生的姓名作为一行,不同科目的成绩作为不同的列。在我们的示例中,由于不同学生的科目不同,因此在新的宽格式数据中可能会存在缺失值。在我们的示例中,我们将学生的姓名作为标识符(id),将科目列的值映射到新的列,并将成绩列的值填充到新列中。是一个非常流行的R语言数据科学工具集,其中包含了许多用于数据处理和可视化的包。该函数接受三个必要的参数:数据集名称、列名映射到新的列以及将值填充到新列的列名。在R语言中,有许多强大的函数和工具可用于对数据进行重塑和转换。

DevScribe的博客 1066

R语言数据reshape:dplyr包函数pivot_wider

pivot_wider函数 1.pivot_wider 的用法: pivot_wider 用于将数据从长格式变为宽格式,增加列数,减少行数。它将某些列的值转换为新的列,并使用这些值填充新列。以下是一些关键参数: names_from: 用于指定要从中获取新列名的列。可以是一个或多个列。 values_from: 用于指定要填充新列的值的来源列。可以是一个或多个列。 names_prefix: 可选,添加到每个变量名的前缀字符串。 names_sep: 可选,用于将 names_from 或 values_

weixin_43168119的博客 2528

使用R语言的pivot_wider函数将数据转换为宽表

在R语言中,我们经常需要对数据进行重塑和转换,以满足不同的分析和可视化需求。其中一个常见的任务是将长表转换为宽表,即将多个列转换为单个列,并且每个唯一值都成为新表的列名。下面我将为你详细介绍pivot_wider的用法,并附上相应的源代码。pivot_wider函数基于用户指定的标识符列和值列,创建一个新的数据框。我们希望将上述数据转换为宽表,其中学生姓名作为记录标识符,科目作为新表的列名,成绩作为新表的值。可以看到,原始的长表已成功转换为宽表,并根据科目创建了新的列。

CyberJolt的博客 897

使用pivot_longer和pivot_wider进行长宽数据转换

使用pivot_longer和pivot_wider进行长宽数据转换

医学和生信笔记的博客 6491

使用R语言中的`pivot_wider`函数将数据转换为宽表

在R语言中,我们经常需要对数据进行重塑和转换,以满足不同的分析和可视化需求。其中一个常见的任务是将数据从长表形式转换为宽表形式。可以看到,原始数据集中的学生姓名列被转换为了新的列,并且每个学生的成绩都被放置在了相应的列中。函数将这个数据集转换为宽表形式,其中每个学生的成绩将成为一列。这是一个典型的长表形式的数据集,其中每一行表示一个学生在一个科目上的成绩。参数指定了新生成的列的名称应该来自原始数据中的哪一列,这里我们选择了。参数指定了新生成的列中的值应该来自原始数据中的哪一列,这里我们选择了。

2301_79326891的博客 450

R语言使用tidyr包的pivot_wider函数将dataframe数据从长表变换为宽表

R语言使用tidyr包的pivot_wider函数将dataframe数据从长表变换为宽表

statistics+insight+vista+power 1578

R语言矩阵转置的三种方法:base/tidyverse/data.table原理与选型指南

矩阵转置是数据分析中基础却易被误解的操作,其本质并非简单的行列交换,而是数据结构的语义重定义。在R语言中,不同实现路径对应不同底层原理:base R的`t()`函数基于列优先存储实现零拷贝元数据映射,高效但要求纯数值类型;tidyverse通过`pivot_longer`+`pivot_wider`执行语义化重塑,天然支持混合类型与缺失值;data.table的`melt`+`dcast`则采用哈希分组与引用机制,在百万级数据上兼顾性能与可控性。技术价值体现在对数据类型稳定性、缺失值传播逻辑及内存行为的精准

weixin_33743661的博客 364

R语言使用tidyr包的pivot_wider函数从长表变换为宽表、pivot_longer函数从宽表变换为长表

R语言使用tidyr包的pivot_wider函数从长表变换为宽表、pivot_longer函数从宽表变换为长表

statistics+insight+vista+power 1409

使用R进行长宽数据转换

长数据一般是指数据集中的变量没有做明确的细分,即变量中至少有一个变量中的元素存在值严重重复循环的情况(可以归为几类),表格整体的形状为长方形,即 变量少而观察值多。宽数据是指数据集对所有的变量进行了明确的细分,各变量的值不存在重复循环的情况也无法归类。数据总体的表现为 变量多而观察值少。

weixin_43210681的博客 2923

R语言tidyr包pivot_longer函数、pivot_wider函数数据表变换实战(长表到宽表、宽表到长表)

R语言tidyr包pivot_longer函数、pivot_wider函数数据表变换实战(长表到宽表、宽表到长表) 目录 R语言tidyr包pivot_longer函数、pivot_wider函数数据表变换实战(长表到宽表、宽表到长表) #仿真数据 #导入tidyr包 #pivot_wider函数从长表到宽表 #仿真数据 data <- data.frame(ID1 = LETTERS[1:4], # Create example data .

data+scenario+science+insight 2851

R语言使用频数数据构建二分类逻辑回归模型,频数数据(多个分类指标对应的阴性样本和阳性样本的频数数据、pivot_wider函数将数据转化为宽表目标变量为两列)、weights参数指定频数值

R语言glm函数使用频数数据构建二分类logistic回归模型,分析的输入数据为频数数据(多个分类指标对应的阴性样本和阳性样本的频数数据、pivot_wider函数将数据转化为宽表目标变量为两列)、weights参数指定频数值......

statistics+insight+vista+power 606

【R语言数据清洗必杀技】:利用pivot_wider + values_fn实现复杂聚合的3种场景

掌握tidyr pivot_wider values_fn,轻松解决R语言数据重塑难题。详解3种复杂聚合场景下的数据清洗技巧,涵盖重复值处理、多值合并与自定义函数应用,提升数据整理效率。方法实用,代码可复用,值得收藏。

LogicPlex的博客 361

Spring Boot Admin 完整教程

SpringBootAdmin是一个用于管理和监控SpringBoot应用的Web工具,提供健康检查、性能指标、日志管理等核心功能。系统由AdminServer(管理服务器)和AdminClient(客户端)组成,通过Actuator端点收集数据。配置需添加Maven/Gradle依赖,通过@EnableAdminServer注解启动服务端,客户端需配置注册信息。支持UI自定义、安全认证(基本/OAuth2)、多种通知方式(邮件/Slack)及与Eureka/Consul等服务发现的集成。最佳实践包括分层监

weixin_51040479的博客 2553

R语言 pivot_longer 图表变换

relig_income #> # A tibble: 18 x 11 #> religion `<$10k` `$10-20k` `$20-30k` `$30-40k` `$40-50k` `$50-75k` `$75-100k` #> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <

/dev/null 7145

二、ROS2完成Docker容器和宿主机通信,使用ros2 topic list看到,但是无法echo

如果容器和主机权限不一致,则会导致无法通信(我的代码中,docker容器是root,宿主机是普通用户),虽然可以查询到相关话题,但是订阅后没有消息输出。比如,docker容器创建了一个共享内存,其所有者为docker容器用户root,当宿主机去访问的时候,由于用户不同,没有权限访问,也就无法进行信息传递。该方法只是临时修改共享内存的权限,每次运行完,需要重新运行上述命令,才可以进行通信。在运行的过程中,ROS2使用了共享内存机制,会共享内存。运行之后,宿主机和容器可能用户名不同,这是因为。

qq_43280851的博客 1265

青少年C/C++软件编程(四级)等级考试真题及答案解析目录

3. 带通配符的字符串匹配。1. 怪盗基德的滑翔翼。3.最长公共子上升序列。4.宠物小精灵之收服。

长春高老师编程 3030

推荐两个长宽数据互换函数pivot_longer和pivot_wider

长宽数据转换有reshape(真难用),reshape2,cast,melt,spread,gather后两项非常简单易用,pivot_longer和pivot_wider,更强劲,在数据重组过程中还完成了数据分列的动作,下面实例摘自tidyr的说明: who %>% pivot_longer( cols = new_sp_m014:newrel_f65, names_to ...

qq_43872984的博客 8728

Vue - 超强实现网页禁止浏览器缩放功能,浏览器缩放时保持网页不变形、元素不会被挤压等,屏蔽浏览器鼠标滚轮缩放页面(提供详细示例代码,一次引入整个网站无人可以搞乱你的页面布局及样式)

vue,nuxt,禁止浏览器缩放,如何用户缩放浏览器导致页面变形,网页缩放后页面变形了怎么办,怎么解决网站被缩放后元素乱套错乱,vue怎么禁止网页不被缩放,vue如何禁止浏览器缩放,vue缩放网页变形影响布局怎么办,vue电脑分辨率及缩放导致页面变形的问题,前端页面解决浏览器或者系统被放大和缩小导致的显示问题,Vue中页面自适应缩放,如何防止Vue页面缩放时变形/调整大小,Vue项目中,防止页面被缩放和放大,vue等比例缩放网页,网页缩放后界面变形咋办,禁止页面缩放,vue禁止浏览器改变窗口大小,Vue项目

🏆 前端领域优质创作者 1万+

R语言时空数据分析-数据处理及可视化基础

本章有两个主要目标。 读取、处理时空分析数据 简单的可视化时空数据的方法,(例如,空间分布图,时间序列图和 Hovmöller 图)。 1.数据整理 时空建模和预测通常涉及大量数据,这些数据以各种形式提供给用户,但通常以 CSV 文件或文本文件中的表格形式提供。通常会花费大量时间来加载数据并对其进行预处理,以便将它们转化为适合分析的形式。R 中有几个包可以帮助用户快速实现这些目标;在这里,我们专注于使用tidyverse工作流处理删失,它们包含特别适合所需数据操作技术的函数。我们首先加载所需的包,以及

RookieTrevor的博客 6253

lammps案例:热导率模拟案例讲解(NEMD方法)

lammps计算热导率大体可以分为三种方法:EMD、NEMD、rNEMD。 本文介绍非平衡模拟(NEMD)热导率的计算方法。 NEMD下热导率计算公式为: k=dQ*dZ/dt k:热导率 dQ:能量通量。 dT/dZ:温度梯度。 非平衡态下计算热导率的原理是在材料的两端或者中间设置热源和冷源。 在热源输入热量,在冷源抽取等量的热量,在这个过程中计算材料内部会有热量的传递,产生温度梯度。 在lammps模拟中得到能量通量和温度梯度,代入公式即可求得热导率。 热量的输入方式有多种,如fix langevin

lammps_jiayou的博客 1万+

PLC框架-1.3- 汇川PN伺服(3号报文)

本文以汇川IS620F伺服为例,详细介绍了FB_Servo_ToAxis功能块的应用方法。该功能块封装了MC_Home等轴控指令,实现使能、定位、点动、速度模式及回零等功能,支持转矩限制与显示,并具备行程统计和HMI单位自动切换特性。文章从硬件配置(PN网络连接、报文选择)、参数设置(控制模式、电子齿轮比),到软件实现(功能块调用、手动/自动控制逻辑)进行了系统说明,重点展示了绝对/相对定位、速度模式等典型应用场景的程序编写方法,为汇川伺服在Profinet网络下的工程应用提供了完整解决方案。

qq_34047402的博客 756
上一篇: (mb_strlen编码参数深度剖析):影响PHP字符串长度计算的关键因素
下一篇: 【R语言数据处理黑科技】:rowwise如何实现逐行计算的精准控制
DebugVibe
博客等级 码龄1年 151粉丝 2172原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值