Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何将高度测量转换为统一格式?

如何将高度测量转换为统一格式?
EN

Stack Overflow用户
提问于 2021-10-06 04:04:03
回答 1查看 40关注 0票数 0

我有一组数据,其中包括许多高度测量作为字符变量。有些写成“5英尺7",有些写成”170厘米“,有些写成”1.7米“,有些写成"170”。

我想更改它们,使它们都显示为没有度量单位的数值变量(例如,仅170 )。

EN

回答 1

Stack Overflow用户

发布于 2021-10-06 13:13:37

数据角力是一种奇妙的乐趣,涉及到边缘情况的相当多的跌跌撞撞和推特:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
heights <- c("5ft 7", "170cm", "1.7m", "6' 7", "150", "5' 2\"", "5ft8")
heights
[1] "5ft 7"  "170cm"  "1.7m"   "6' 7"   "150"    "5' 2\"" "5ft8"

但也提供了探索许多工具的机会。用一种统一的度量,比如说厘米,索引我们得到的符号:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
b4meas <-gsub('[0-9\\. ]', '', heights)
b4meas  
[1] "ft"  "cm"  "m"   "'"   ""    "'\"" "ft"

gsub中的模式`0-9。‘是说给我所有不是数字、点或空格的东西。我们可能想要为这些不同的情况建立索引以进行转换:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
which(b4meas== 'ft')
[1] 1 7
which(b4meas== '')
[1] 5

以及对数字的探索:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
char_num <- gsub('[a-z\']','', heights, perl=TRUE)
char_num
[1] "5 7"   "170"   "1.7"   "6 7"   "150"   "5 2\"" "58"
> which(nchar(char_num) == 2 & b4meas=='ft')
[1] 7
> which(nchar(char_num) == 3 & b4meas=='ft')
[1] 1
> which(nchar(char_num) == 3 & b4meas=="'")
[1] 4
> which(b4meas=="'\"")
[1] 6

所以我们的异类脚标记法,也可以是索引。和我们不需要转换的基于cm的度量:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
which(nchar(char_num) == 3 & b4meas=="'" | b4meas == 'cm')
[1] 2 4

那么,让我们看看我们在这里做了什么:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
split_char <- strsplit(char_num, ' ')
> split_char
[[1]]
[1] "5" "7"

[[2]]
[1] "170"

[[3]]
[1] "1.7"

[[4]]
[1] "6" "7"

[[5]]
[1] "150"

[[6]]
[1] "5"   "2\""

[[7]]
[1] "58"

因此,[2]和[5]可以单独使用,也可以直接写入另一列而不进行转换。[3] * 100,[1]和[4]可以计算,[6]需要进一步清理,[7]需要额外拆分。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sum(as.numeric(split_char[[1]][1])*12 * 2.54, as.numeric(split_char[[1]][2]) * 2.54)
[1] 170.18
# for [[6]]
sum(as.numeric(split_char[[6]][1]) * 12 * 2.54, eval(as.numeric(gsub('\\"', '', split_char[[6]][2])) * 2.54))
[1] 157.48
# either `eval` or `force` can be used to avoid
# Error in gsub( non-numeric argument to binary operator
# for [[7]]
sum(as.numeric(strsplit(split_char[[7]], '')[[1]][1])*12 *2.54, as.numeric(strsplit(split_char[[7]],'')[[1]][2]) * 2.54)
[1] 172.72

好的,我们可以转换,但是等等,我们有一个data.frame!所以,我将使用我们的索引和转换来做it...one希望...

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
> physio_df <- data.frame(heights)
> physio_df[['heights_cm']] <- NA_real_ # add column to convert to
> physio_df
  heights heights_cm
1   5ft 7         NA
2   170cm         NA
3    1.7m         NA
4    6' 7         NA
5     150         NA
6   5' 2"         NA
7    5ft8         NA

这是一个奇迹,我们的一些案例仅仅通过data.frame就被简化了。但这也意味着重新计算b4meas以反映这一点将很有用(因为您已经在data.frame中,所以不需要这样做)。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# [[5]] just take to numeric
physio_df$heights_cm[which(nchar(physio_df$heights) ==3)] <- physio_df$heights[as.numeric(which(nchar(physio_df$heights) ==3))] 
#[[7]] 
physio_df$heights_cm[b4meas== 'm'] <- as.numeric(char_num[b4meas == 'm'])* 100
b4meas2 <- gsub('[0-9\\. ]', '', physio_df$heights)
> b4meas2
[1] "ft"  "cm"  "m"   "'"   ""    "'\"" "ft"
physio_df$heights[[6]]
[1] "5' 2\""

哦,所以这实际上不是一个奇迹,b4meas仍然是一个有效的索引。索引的伟大之处在于,如果你有多个符合标准的案例,所有这些案例都可以解决。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#let's make an index for [[1]] & [[4]] but not [[6]]
one_four_type <- setdiff(which(sapply(split_char, function(x) length(x) == 2)), which(b4meas == "'\""))
# and use in a `for` loop, should `sapply`, data has killed brain
 for(i in 1:length(one_four_type)){
+ physio_df$heights_cm[one_four_type[i]] <-
+ sum(as.numeric(split_char[[one_four_type[i]]][1])*12 * 2.54,
+ as.numeric(split_char[[one_four_type[i]]][2]) * 2.54)
+ }
physio_df
  heights heights_cm
1   5ft 7     170.18
2   170cm       <NA>
3    1.7m        170
4    6' 7     200.66
5     150        150
6   5' 2"       <NA>
7    5ft8       <NA>
# physio_df$heights_cm[2]
physio_df$heights_cm[which(b4meas=='cm')] <- as.numeric(char_num[b4meas=='cm'])
# physio_df$heights_cm[6]
> physio_df$heights_cm[which(b4meas == "'\"")] <-
+ sum(as.numeric(split_char[[6]][1]) * 12 * 2.54, eval(as.numeric(gsub('\\"', '', split_char[[6]][2])) * 2.54))
# physio_df$heights_cm[7]
physio_df$heights_cm[7] <- sum(as.numeric(strsplit(split_char[[7]], '')[[1]][1])*12 *2.54, as.numeric(strsplit(split_char[[7]],'')[[1]][2]) * 2.54)
> physio_df
  heights heights_cm
1   5ft 7     170.18
2   170cm        170
3    1.7m        170
4    6' 7     200.66
5     150        150
6   5' 2"     157.48
7    5ft8     172.72
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69465386

复制
相关文章
上传图片接口
/**  *上传图片  * @param savePath  * @return  * @throws Exception  */ public String saveImage(String savePath, File imagePath,String imagePathFileName)throws Exception{  StringBuffer sb = new StringBuffer();  String path = ""; if(null != imagePath 
用户1220053
2018/02/09
3.6K0
.net mvc + layui做图片上传(二)—— 使用流上传和下载图片
摘要:上篇文章写到一种上传图片的方法,其中提到那种方法的局限性,就是上传的文件只能保存在本项目目录下,在其他目录中访问不到该文件。这与浏览器的安全性机制有关,浏览器不允许用户用任意的路径访问服务器上的资源,因为这可能造成服务器上其他位置的信息被泄露。浏览器只允许用户用相对路径直接访问本项目路径下的资源。那么,如果A项目要访问B项目上传的文件资源,这就产生问题了。所以这就需要另外一种方法来解决这个问题,那就是通过 流(Stream)的形式上传和下载文件资源。这种方法因为不是通过路径直接访问文件,而是先把文件读取的流中,然后将流中的数据写入到新的文件中,还原需要上传的文件,所以也就不存在上面的问题了。本片博客,着重介绍一下这种方式的实现。
CherishTheYouth
2019/07/30
2.1K0
.net mvc + layui做图片上传(二)—— 使用流上传和下载图片
postman测试上传图片接口步骤教程
Postman是一款功能强大的网页调试与发送网页HTTP请求的Chrome插件,前端也要学会使用,只有这样,当接口调试不通的时候,用测试工具,才能够更有底气的甩一张截图给你家的后端,瞧,这是你写的bug。
王小婷
2020/07/29
7.5K0
postman测试上传图片接口步骤教程
从获取URL参数到JS URL()和URLSearchParams() 接口
获取URL参数有有2中,一直是split 切片,一种是正则表达式匹配。这个是传统方法。
周陆军博客
2023/05/07
5.3K0
Bmob的使用-上传图片
亿签-让签到更简单( 实验室签到系统 ):点击跳转 https://github.com/FishInWater-1999/android-SignInSystem
圆号本昊
2021/09/24
1.7K0
Bmob的使用-上传图片
Fckeditor中使用图片上传
所需jar包为下图的5个jar包,其中第三个为Fckeditor的核心包,全名应该叫fckeditor-java-core-2.4.jar
Java架构师必看
2021/05/17
1.2K0
Fckeditor中使用图片上传
django使用ckeditor上传图片
1、在模型类中设置字段为富文本类型,这里需要注意引入的是RichTextUploadingField,以允许上传图片,需要和RichTextField区分开
py3study
2020/01/22
2.5K0
laravel 使用Postman上传多图片
[{“key”:”Content-Type”,”value”:”multipart/form-data”,”description”:””,”enabled”:true}]
全栈程序员站长
2022/07/11
1.5K0
laravel 使用Postman上传多图片
人脸融合是否有接口自己上传素材图片?
人脸融合是否有接口自己上传素材图片?有没有大佬告诉我下下,我没找到啊!!!凑下字数123456798123456789123467891324567891234567891324567891234567891234567891234567891212345679812345678912346789132456789123456789132456789123456789123456789123456789123
用户3711132
2020/04/28
1.3K0
http接口取参方式 – getParameter 和 getParameterValues[通俗易懂]
最近写http接口时,有了很多关于接口取参方式的疑问,大家都知道 Servlet常用的取参方式有 getParameter、getParameterValues、getInputStream(读流形式)。SpringMvc 常用的有封装好的 @RequestParam ,RequestBody 。这些取参方式都有什么特点,我都写了测试接口,利用postman 做了测试。通过测试现象得到了如下结论,如有错误,请指正。
全栈程序员站长
2022/09/15
1.2K0
python+mysql上传图片和上传文件 转
参考博客:http://www.cognize.me/2016/05/09/djangopic
晓歌
2018/08/15
1.7K0
python+mysql上传图片和上传文件
                                                                            转
ThinkPHP-图片上传和裁剪
图片上传是指将本地计算机中的图片传输到服务器上。在 ThinkPHP 中,我们可以使用 PHP 自带的 $_FILES 变量来实现图片上传。具体步骤如下:
堕落飞鸟
2023/05/03
1.2K0
vue上传和浏览图片(FileReader)
<template> <div ref="box"> ... <input ... /> // 给个img来承担预览工作就行了 <img :src="dataUrl" /> ... </div> </template> <sctipt> data () { return { // 转base64码后的data字段 dataUrl: '' }
河湾欢儿
2018/12/06
3.6K0
实现简单的分片上传和图片处理,解决了大图片上传和显示问题
如果我们的图片达到几兆时,我就不说几个G了,我是为了模拟分片上传,并顺便解决我的垃圾服务器的上传速度慢问题。
品茗IT
2021/01/29
2.6K0
实现简单的分片上传和图片处理,解决了大图片上传和显示问题
上传图片
// 允许上传的图片后缀 $allowedExts = array("gif", "jpeg", "jpg", "png"); $temp = explode(".", $_FILES["file"]["name"]); $temp1 = explode(".", $_FILES["file1"]["name"]); $temp2 = explode(".", $_FILES["file2"]["name"]); $temp3 = explode(".", $_FILES["file3"]["name"])
达达前端
2022/04/29
11.2K0
在Typora中使用PicList上传图片
Typora在Mac、Windows上都发布了对应的软件,属于跨平台的软件,并且Typora可以与其他图片上传软件形成组合拳。
吴蛋蛋
2023/03/30
2K0
在Typora中使用PicList上传图片
iOS实现视频和图片的上传
这里有事先创建两个可变数组uploadArray, uploadedArray, 一个存放准要上传的内容, 一个存放上传完的内容
周希
2019/10/15
1.9K0
Django 上传图片和Admin站点5.2
上传图片 当Django在处理文件上传的时候,文件数据被保存在request.FILES FILES中的每个键为<input type="file" name="" />中的name 注意:FILES只有在请求的方法为POST 且提交的<form>带有enctype="multipart/form-data" 的情况下才会包含数据。否则,FILES 将为一个空的类似于字典的对象 使用模型处理上传文件:将属性定义成models.ImageField类型 pic=models.ImageField(upload
Lansonli
2021/10/09
4900
点击加载更多

相似问题

上传图片和其他参数到服务器

15

使用react参参和形式

12

上传图片字节到cloudinary上传接口

12

使用和PHP上传图片?

11

如何使用FileReader接口从url上传图片文件?

20
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

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

洞察 腾讯核心技术

剖析业界实践案例

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