我已经进行了.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等的方法吗?
答案 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)