Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何在R中的数据帧匹配/比较中包含一个误差级别

如何在R中的数据帧匹配/比较中包含一个误差级别
EN

Stack Overflow用户
提问于 2016-08-01 01:45:44
回答 2查看 211关注 0票数 1

我对R是新手,我正在尽我最大的努力(到目前为止,还很好),但是我遇到了一个问题。我有两个数据帧,一个有理论值,另一个有实验值,数据帧不是相同的长度。我想比较这两个数据帧,以找到它们之间的匹配值。由于它是理论值和实验值,我需要在匹配值时包含一个误差级别,比如从理论值中的±0.5。这就是我遇到问题的地方--我不知道如何包含这个错误。

数据帧很安静,很大,但下面是我尝试过的一个例子。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Theory <- c("195.0882",
            "196.0852",
            "196.0916",
            "300.1600",
            "288.1752",
            "289.1786",
            "290.1819",
            "393.2077",
            "394.2111")

Experi <- c("195.0312",
            "196.0340",
            "196.1251",
            "288.1856",
            "289.1786",
            "290.1819")


T <- data.frame(Theory)
E <- data.frame(Experi)
M1 <- merge.default(T, E)
M2 <- match(Theory, Experi)
M2
# [1] NA NA NA NA NA  5  6 NA NA

合并和匹配都没有错误的空间,比较包似乎也没有帮助。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-08-01 02:11:39

我们可以使用data.table::foverlaps函数进行重叠合并。首先,我们需要准备数据,为理论值创建范围。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
library(data.table)

# set tolerance for merge
tolerance <- 0.5

# Theory data, prepare data with tolerance for Start/End
dt_T <- data.table(
  Theory = as.numeric(Theory),
  Start = as.numeric(Theory) - tolerance,
  End = as.numeric(Theory) + tolerance, 
  key= c("Start", "End"))

# Experi data, Start/End are the same
dt_E <- data.table(
  Experi = as.numeric(Experi),
  Start = as.numeric(Experi),
  End = as.numeric(Experi), 
  key= c("Start", "End"))

# merge with overlap
foverlaps(dt_E, dt_T)
#      Theory    Start      End   Experi  i.Start    i.End
# 1: 195.0882 194.5882 195.5882 195.0312 195.0312 195.0312
# 2: 196.0852 195.5852 196.5852 196.0340 196.0340 196.0340
# 3: 196.0916 195.5916 196.5916 196.0340 196.0340 196.0340
# 4: 196.0852 195.5852 196.5852 196.1251 196.1251 196.1251
# 5: 196.0916 195.5916 196.5916 196.1251 196.1251 196.1251
# 6: 288.1752 287.6752 288.6752 288.1856 288.1856 288.1856
# 7: 289.1786 288.6786 289.6786 289.1786 289.1786 289.1786
# 8: 290.1819 289.6819 290.6819 290.1819 290.1819 290.1819
票数 0
EN

Stack Overflow用户

发布于 2016-08-03 01:28:20

根据您的评论,您说您只想为每个实验值得到一个单一的理论值,即使多个理论值满足公差。您的意思是,如果有多个候选人满足容忍度,您希望在所有候选人中选择最接近的匹配。但你也说没有必要与每一种价值相匹配。我认为这是一个矛盾。如果需要选择所有理论值中最接近的匹配理论值,则意味着需要将每个实验值与所有理论值进行比较,以确保选择所有理论值中最接近的匹配值。

findInterval()函数适用于这一目的。通过首先对理论向量进行排序,我们可以使用它作为vec参数的findInterval(),这将允许使用二进制搜索,以找到每个实验值的下界。我们可以指定all.inside=T,以确保返回的索引都在排序的理论向量中(而不是指向最后一个元素),然后在相邻元素上执行额外的除法器,以在上层元素实际上更接近实验值时添加1。

最后,我们可以应用公差。从您的问题看来,您可能希望返回NA的实验值,没有匹配的理论值,IOW,其中没有理论值,满足公差。如果上一步中发现的理论值不满足相应的实验值,则可以很容易地在这一点上达到这一要求。

另外,次要的一点:我不知道你为什么把向量定义为字符。我们需要数值来执行这些操作。

因此:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
theory <- c(195.0882,196.0852,196.0916,300.16,288.1752,289.1786,290.1819,393.2077,394.2111);
experi <- c(195.0312,196.034,196.1251,288.1856,289.1786,290.1819);

## sort theory for findInterval() binary search
theory <- sort(theory);

## get closest match for each experi element
i <- findInterval(experi,theory,all.inside=T);
inc <- which(abs(theory[i+1L]-experi)<abs(theory[i]-experi));
i[inc] <- i[inc]+1L;

## init result vector
res <- theory[i];

## replace with NA any result elements whose deviations exceed the tolerance
res[abs(res-experi)>0.5] <- NA_real_;

## show result in a nice format
data.frame(experi,res,error=experi-res);
##     experi      res   error
## 1 195.0312 195.0882 -0.0570
## 2 196.0340 196.0852 -0.0512
## 3 196.1251 196.0916  0.0335
## 4 288.1856 288.1752  0.0104
## 5 289.1786 289.1786  0.0000
## 6 290.1819 290.1819  0.0000
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38695712

复制
相关文章
详谈R中散点图添加误差线的细节
加载R包 library(tidyverse) library(ggsci) 导入数据 df <- read_tsv("data.txt") 数据可视化 df %>% ggplot(aes(case_control,logCPM)) + geom_jitter(aes(fill=case_control,color=case_control), pch=21,width=0.1,size=2)+ stat_boxplot(geom="errorbar",widt
R语言数据分析指南
2022/12/22
1.7K0
详谈R中散点图添加误差线的细节
如何在 iOS 的源码中包含图片?
通过添加这个开源库,笔者 80% 的调试工作都可以用这个库完成,而无需 Xcode 工具。
酷酷的哀殿
2020/10/26
1.5K0
如何在 iOS 的源码中包含图片?
如何在 Pandas 中创建一个空的数据帧并向其附加行和列?
Pandas是一个用于数据操作和分析的Python库。它建立在 numpy 库之上,提供数据帧的有效实现。数据帧是一种二维数据结构。在数据帧中,数据以表格形式在行和列中对齐。它类似于电子表格或SQL表或R中的data.frame。最常用的熊猫对象是数据帧。大多数情况下,数据是从其他数据源(如csv,excel,SQL等)导入到pandas数据帧中的。在本教程中,我们将学习如何创建一个空数据帧,以及如何在 Pandas 中向其追加行和列。
很酷的站长
2023/08/11
3860
如何在 Pandas 中创建一个空的数据帧并向其附加行和列?
视频中的 I 帧,P 帧,B 帧
视频传输原理 视频是由一幅幅帧图像和一组音频构成的,视频的播放过程可以简单理解为一帧帧的画面按照时间顺序呈现出来的过程。但是在实际应用中,并不是每一帧都是完整的画面,因为如果每一帧画面都是完整的图片,那么一个视频的体积就会很大。这样对于网络传输或者视频数据存储来说成本太高,所以通常会对视频流中的一部分画面进行压缩(编码)处理。 编码器将多张图像进行编码后生产成一段一段的 GOP ( Group of Pictures ) 如下图, 解码器在播放时则是读取一段一段的 GOP 进行解码后读取画面再渲染显示。GO
用户1097444
2022/06/29
3.6K0
视频中的 I 帧,P 帧,B 帧
Silverlight中的帧
Silverlight是基于时间线的,不象Flash是基于帧的,所以在Silverlight中,很少看到有文档专门介绍SL中的帧。 但是我们从动画原理知道,动画只不过是一幅幅静态图片连续播放,利用人眼的视觉暂留形成的,因此任何动画从原理上讲,至少还是有每秒播放多少帧这个概念的。 Silverlight的sdk文档中,有一段话: ... maxFramerate 值可通过 Silverlight 插件对象的 maxframerate 参数进行配置。maxframerate 参数的默认值为 60。current
菩提树下的杨过
2018/01/23
9420
如何在R中操作非结构化数据?
本文由CDA作者库成员HarryZhu原创,并授权发布。 CDA作者库凝聚原创力量,只做更有价值的分享。 介绍 现代化数据科学中的 DataFrame 概念源起R语言,而 Python Pandas
CDA数据分析师
2018/02/24
3.3K0
如何在R中操作非结构化数据?
R中字段抽取、字段合并、字段匹配
1、字段抽取 字段抽取,是根据已知列数据的开始和结束位置,抽取出新的列 字段截取函数:substr(x,start,stop) tel <- '18922254812'; #运营商 band <- substr(tel, 1, 3) #地区 area <- substr(tel, 4, 7) #号码段 num <- substr(tel, 8, 11) tels <- read.csv('1.csv'); #运营商 bands <- substr(tels[,1], 1, 3) #地区 areas <-
Erin
2018/01/09
5.4K0
如何在Redhat中配置R环境
R是一套完整的数据处理、计算和制图软件系统。其功能包括:数据存储和处理系统;数组运算工具(其向量、矩阵运算方面功能尤其强大);完整连贯的统计分析工具;优秀的统计制图功能;简便而强大的编程语言:可操纵数据的输入和输出,可实现分支、循环,用户可自定义功能。本文档主要讲述如何在Redhat中使用源码方式编译安装及配置R的环境。
Fayson
2018/03/29
3K0
如何在Redhat中配置R环境
Spring 数据处理中的事务级别
默认的事务级别都在类,这个级别的,这就导致了,如果在循环中对数据进行处理的话,如果循环不结束,事务是不会提交的。
HoneyMoose
2022/10/15
4600
Spring 数据处理中的事务级别
Elasticsearch:Elasticsearch 中的数据强制匹配
在实际的使用中,数据并不总是干净的。 根据产生方式的不同,数字可能会在 JSON 主体中呈现为真实的 JSON 数字,例如 5,但也可能呈现为字符串,例如 “5”。 或者,应将应为整数的数字呈现为浮点数,例如 5.0,甚至是 “5.0”。
腾讯云大数据
2020/10/29
3.4K0
Elasticsearch:Elasticsearch 中的数据强制匹配
6种 数据库隔离级别中的SNAPSHOT隔离级别
实际上之前的一段时间,我的认知也是4种隔离级别,这是通过我们的ANSI SQL 表中中定义的 isolation level。
AustinDatabases
2021/07/15
1.5K0
6种 数据库隔离级别中的SNAPSHOT隔离级别
【数据业务】几招教你如何在R中获取数据进行分析
【IT168 编译】本文是《R编程语言》中一个系列的第二部分。在第一部分中,我们探索如何使用R语言进行数据可视化。第二部分将探讨如何在R语言中获取数据并进行分析。  如今,想要购买一部手机已成为
小莹莹
2018/04/23
2.1K0
【数据业务】几招教你如何在R中获取数据进行分析
如何在R中创建日历热图
首先,我们运行Paul Bleicher创建的calendarHeat函数以显示日历热图。 其次,我们创建一些随机的时间序列数据。 最后,我们在两个调色板中绘制时间序列。
用户1359560
2020/04/01
4.5K0
如何在R中创建日历热图
如何在R中绘制热力地图
本文介绍了如何利用R语言中的maps包和mapdata包绘制地图,并通过热力地图展示数据分布情况。首先,通过map()函数创建地图对象,并获取每个区域的名字以及顺序。然后,在每个区域的名字和顺序后面,加上需要展示的数据以及经纬度。接着,根据数据的大小设置每个区域的颜色深浅,以区分不同的区域。最后,给地图加上地名标记,并添加热力地图元素。
Erin
2018/01/09
3.2K0
如何在R中绘制热力地图
FFmpeg中的子帧延迟
本文来自IBC 2019(International Broadcasting Convention)中的演讲,主要内容是FFmepg编码的子帧延时。演讲内容来自EBU(European Broadcasting Union)的Kieran Kunhya。
用户1324186
2019/10/27
1.9K0
如何在R中绘制树图(TreeMap)
本文介绍了如何利用R语言中的Treemap函数绘制树图,并给出了一个实例,包括使用安装包、设定颜色范围、边框颜色、节点大小、填充颜色等参数。同时还介绍了两种方法,一是通过aggregate函数对数据进行分组,二是通过手动设置index和vSize、vColor、type等参数来绘制树图。
Erin
2018/01/09
5.3K0
如何在R中绘制树图(TreeMap)
分析R中的Elasticsearch数据
您可以在任何可以安装R和Java的计算机上使用纯R脚本和标准SQL访问Elasticsearch数据。您可以使用适用于Elasticsearch的CData JDBC驱动程序和RJDBC软件包来处理R中的远程Elasticsearch数据。通过使用CData驱动程序,您可以利用为经过行业验证的标准编写的驱动程序来访问流行的开源数据R语言。本文介绍如何使用驱动程序对Elasticsearch执行SQL查询,并通过调用标准R函数可视化Elasticsearch数据。
用户3382876
2018/11/05
2.8K0
如何在Redhat中安装R的包及搭建R的私有源
继上一章如何在Redhat中配置R环境后,我们知道对于多数企业来说是没有外网环境的,在离线环境下如何安装R的包,能否搭建R的私有源对R的包进行管理。
Fayson
2018/03/29
4.2K0
如何在Redhat中安装R的包及搭建R的私有源
expect中的正则匹配[通俗易懂]
注意.*在这里是贪婪匹配,也就是说会尽可能多的匹配 所以pattern的各个项对应关系:
全栈程序员站长
2022/11/01
1.2K0
点击加载更多

相似问题

R中数据帧的比较

36

匹配R中的数据帧

10

匹配R中的数据帧

33

R:定义数据帧中因子的级别

10

数据帧值误差中两列的比较

20
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文