从数据框中的数值中删除度数符号

时间:2015-02-18 14:57:56

标签: r

我已经进行了.csv格式的温度测量,并尝试在R中进行分析。出于某种原因,数据文件包含数字值后面的温度C。有没有办法删除C度符号并返回数值?我虽然在这里制作一个例子,但不知道如何在R中的字符串中生成度数符号。无论如何,这就是数据的样子:

> head(mm)
             dateTime Temperature
1 2009-04-23 17:01:00   15.115 °C
2 2009-04-23 17:11:00   15.165 °C
3 2009-04-23 17:21:00   15.183 °C

其中mm [,2]的类是'因子'

有人建议将第二列转换为15.115等的方法吗?

3 个答案:

答案 0 :(得分:2)

您可以使用scan()同时删除不需要的部分并将其余部分全部转换为数字。设置flush = TRUE将最后一个字段(在最后一个空格之后)视为注释,并将其丢弃(因为sep默认需要空格分隔符。)

mm <- read.table(text = "dateTime Temperature
1 '2009-04-23 17:01:00'  '15.115 °C'
2 '2009-04-23 17:11:00'   '15.165 °C'
3 '2009-04-23 17:21:00'   '15.183 °C'", header = TRUE)     

replace(mm, 2, scan(text = as.character(mm$Temp), flush = TRUE))
#              dateTime Temperature
# 1 2009-04-23 17:01:00      15.115
# 2 2009-04-23 17:11:00      15.165
# 3 2009-04-23 17:21:00      15.183

或者您可以使用Unicode常规类别来匹配度数符号的unicode字符。

type.convert(sub("\\p{So}C", "", mm$Temp, perl = TRUE))
# [1] 15.115 15.165 15.183

此处,正则表达式\p{So}匹配不是数学符号,货币符号或组合字符的各种符号。 C字面匹配字符C(区分大小写)。 type.convert()负责额外的空白。

答案 1 :(得分:0)

如果您的所有温度值都具有相同的位数,您可以使左右功能(类似于Excel中的那些)选择所需的数字。比如来自不同帖子的答案:https://stackoverflow.com/a/26591121/4459730

首先制作左侧功能:

left = function (string,char){
substr(string,1,char)
}

然后仅使用您想要的数字重新创建您的温度字符串:

mm$Temperature<-left(mm$Temperature,6)

答案 2 :(得分:0)

度数符号表示为\u00b0,因此以下代码应该有效:

df['Temperature'] = df['Temperature'].replace('\u00b0','', regex=True)