Приношу извинения, потому что, конечно, есть много похожих вопросов и ответов, но я попробовал несколько предложенных ответов, но, к сожалению, безрезультатно.
У меня есть данные о температуре в трех столбцах кадра данных (tempdata). Для простоты я просто пытаюсь изменить одно из этих мест (wentworth.castle) за раз.
Вот как выглядят мои данные. Все столбцы с «.castle» представляют собой температуру для этого сайта. Отсутствуют значения, но это ожидаемо. В надежде превратить их в АН.
glimpse(tempdata)
Rows: 3,395
Columns: 5
$ Description <chr> "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", …
$ date.time <chr> "22/11/2023 09:48", "22/11/2023 10:18", "22/11/2023 10:48", "22/11/2023 11:…
$ site.castle <chr> "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "",…
$ dover.castle <chr> "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "",…
$ wentworth.castle <chr> "9.484 \xb0C", "9.642 \xb0C", "9.768 \xb0C", "9.994 \xb0C", "10.066 \xb0C",…
Я попробовал несколько вещей ниже и получил следующие ошибки.
tempdata$wentworth.castle <- gsub(" �C", "", as.numeric(tempdata$wentworth.castle))
#Error in is.factor(x) : invalid multibyte string at '<b0>C'
tempdata$wentworth.castle <- gsub(" \xb0C", "", as.numeric(tempdata$wentworth.castle))
#Error in is.factor(x) : invalid multibyte string at '<b0>C'
tempdata$wentworth.castle = tempdata$wentworth.castle.replace('\u00b0','', regex=True)
#Error: attempt to apply non-function
tempdata$wentworth.castle <- as.numeric(tempdata$wentworth.castle)
#Error: invalid multibyte string at '<b0>C'
Я также попробовал менее надежный способ и попытался создать функцию для удаления элементов после определенного количества символов, однако это сложно, потому что иногда мои данные имеют 5 знаков, а иногда 6, поэтому даже если бы это сработало, у меня было бы несколько случайных цифр. пробелы для удаления из некоторых записей.
left = function(string, chat){substr(string, 1, char)}
tempdata$wentworth.castle <- left(tempdata$wentworth.castle, 6)
#Error in as.integer(stop) :
# cannot coerce type 'closure' to vector of type 'integer'





Это проблема с кодировкой, которая неправильно интерпретирует символ градуса. Вы можете использовать iconv для преобразования, а затем gsub для удаления °C:
# data
wentworth <- c("9.484 \xb0C", "9.642 \xb0C", "9.768 \xb0C", "9.994 \xb0C", "10.066 \xb0C")
gsub(" °C","", iconv(wentworth, from = "ISO-8859-1", to = "UTF-8"))
# [1] "9.484" "9.642" "9.768" "9.994" "10.066"
# or if you want it numeric, just wrap it
as.numeric(gsub(" °C","", iconv(wentworth, from = "ISO-8859-1", to = "UTF-8")))
# [1] 9.484 9.642 9.768 9.994 10.066
это идеальный вариант использования pars_number() из readr пакета:
library(readr)
parse_number(wentworth)
[1] 9.484 9.642 9.768 9.994 10.066