J'ai copié et collé les informations météorologiques du site Web suivant "Weather Underground" pour une analyse des données et les données se présentent comme ci-dessous:

https://www.wunderground.com/dashboard/pws/KCACHINO13/table/2018-04-10/2018-04-10/daily

enter image description here

Comme vous pouvez le voir, la température et d'autres informations ont toutes le texte avec elle, donc je ne peux pas effectuer de calcul. Dans Excel, j'ai utilisé un substitut (xx, "F", "") pour supprimer le F de la colonne "Temperature", mais je voulais ensuite convertir Farenheit en Celcius en utilisant convert (xx, "F", "C") , Je n'ai pas pu obtenir le résultat. Je pense qu'il y a quelque chose qui ne va pas avec les données elles-mêmes. J'ai formaté la cellule en nombre ou copier et coller la valeur dans une nouvelle colonne, mais aucun d'eux n'a fonctionné.

Ensuite, j'importe le data.frame dans R et j'essaye de mettre en forme les données en utilisant R. J'ai vérifié la classe de la colonne Temperature, qui montre "character":

class(a$Temperature)
#"character"

a$Temperature <- gsub("F","",a$Temperature)
# this command remmoved "F"

as.numeric(a$Temperature)
#Warning message: NAs introduced by coercion 

as.numeric(unlist(a$Temperature))
#still the same warning message

À partir d'Excel, j'ai créé la nouvelle colonne en supprimant "F" de la température, et je l'ai utilisé dans R pour convertir "caractère" en "numérique", j'ai toujours reçu le message d'avertissement. Je ne sais pas comment gérer ce problème. Quelqu'un pourrait-il m'aider avec ça? Merci!

Comme recommandé ci-dessous, je colle la sortie de

dput(head(a))

#structure(list(Time = structure(c(-2209075140, -2209074840, -2209074540, 
-2209074240, -2209073940, -2209073640), tzone = "UTC", class = c("POSIXct", 
"POSIXt")), Temperature = c("60.0 ", "59.9 ", "59.8 ", "59.7 ", 
"59.6 ", "59.5 "), `T(F)` = c("60.0 ", "59.9 ", "59.8 ", "59.7 ", 
"59.6 ", "59.5 "), `Dew Point` = c("48.2 F", "48.1 F", "48.4 F", 
"48.3 F", "48.2 F", "48.1 F"), Humidity = c("65 %", "65 %", "66 %", 
"66 %", "66 %", "66 %"), Wind = c("WSW", "WSW", "WSW", "WSW", 
"WSW", "WSW"), Speed = c("0.0 mph", "0.0 mph", "0.0 mph", "0.0 mph", 
"0.0 mph", "0.0 mph"), Gust = c("0.0 mph", "0.0 mph", "0.0 mph", 
"0.0 mph", "0.0 mph", "0.0 mph"), Pressure = c("29.88 in", "29.88 in", 
"29.88 in", "29.88 in", "29.88 in", "29.88 in"), `Precip. Rate.` = c("0.00 in", 
"0.00 in", "0.00 in", "0.00 in", "0.00 in", "0.00 in"), `Precip. Accum.` = c("0.00 in", 
"0.00 in", "0.00 in", "0.00 in", "0.00 in", "0.00 in"), UV = c(0, 
0, 0, 0, 0, 0), Solar = c("0 w/m²", "0 w/m²", "0 w/m²", "0 w/m²", 
"0 w/m²", "0 w/m²")), row.names = c(NA, -6L), class = c("tbl_df", 
"tbl", "data.frame"))
0
XM_Z 27 août 2020 à 21:25

2 réponses

Meilleure réponse

Si vous souhaitez convertir uniquement la colonne de température, voici une option que vous pouvez envisager.

Données

df <- structure(list(Time = c("12:04 AM", "12:09 AM", "12:14 AM", "12:19 AM", 
"12:24 AM", "12:29 AM"), Temperature = c("69.4 F", "69.2 F", 
"68.8 F", "68.5 F", "68.3 F", "68.0 F"), Dew.Point = c("45.9 F", 
"46.0 F", "45.8 F", "45.7 F", "45.7 F", "45.7 F"), Humidity = c("43 %", 
"43 %", "44 %", "44 %", "44 %", "45 %"), Wind = c("NE", "NE", 
"NE", "NE", "NE", "NE"), Speed = c("0.0 mph", "0.0 mph", "0.0 mph", 
"0.0 mph", "0.0 mph", "0.0 mph"), Gust = c("0.0 mph", "0.0 mph", 
"0.0 mph", "0.0 mph", "0.0 mph", "0.0 mph"), Pressure = c("29.93 in", 
"29.94 in", "29.94 in", "29.95 in", "29.95 in", "29.95 in"), 
    Precip..Rate. = c("0.00 in", "0.00 in", "0.00 in", "0.00 in", 
    "0.00 in", "0.00 in"), Precip..Accum. = c("0.00 in", "0.00 in", 
    "0.00 in", "0.00 in", "0.00 in", "0.00 in"), UV = c(0L, 0L, 
    0L, 0L, 0L, 0L), Solar = c("0 w/m²", "0 w/m²", "0 w/m²", 
    "0 w/m²", "0 w/m²", "0 w/m²")), class = "data.frame", row.names = c(NA, 
-6L))

Code

library(dplyr)
library(stringr)
df2 <- df %>% 
  mutate(Temperature2 = as.numeric(str_extract(Temperature, "[\\d\\.]+"))) %>% 
  relocate(Temperature2, .after = Temperature)

df2[, 2:3]
#   Temperature Temperature2
# 1      69.4 F         69.4
# 2      69.2 F         69.2
# 3      68.8 F         68.8
# 4      68.5 F         68.5
# 5      68.3 F         68.3
# 6      68.0 F         68.0
str(df2$Temperature2)
# num [1:6] 69.4 69.2 68.8 68.5 68.3 68
2
Tho Vu 27 août 2020 à 18:57

Peut-être que cela aide. Dans cette fonction, il y a quelques fonctions différentes imbriquées, telles que le passage d'une variable de caractère à une valeur numérique. Aussi gsub, qui change la virgule en espace vide. Vous devez simplement changer la virgule en lettre ce que vous changez. Jamais essayé si cela fonctionne avec des lettres, mais cela pourrait être une solution. Voici le code:

Data666 <- apply (data, 2, function (x) as.numeric (as.character (gsub (",", "", x))))

La fonction Apply applique des fonctions à l'ensemble de données. 2 signifie qu'il le fait colonne par colonne. Si vous voulez le changer ligne par ro, vous devez changer 2 en 1.

0
Joel Länsisalmi 28 août 2020 à 06:36