如何将 3650 列(温度)从开尔文转换为摄氏度?

How to convert 3650 columns (temperature) from Kelvin to Celsius?

我有一个包含 10 年每日温度数据的数据框。我想将所有值转换为摄氏度。所以我有 3.653 列和 500 行。

我的数据样本如下所示:

    
Location_ID     day1_2010     day2_2010     day3_2010    day4_2010 
------------------------------------------------------------------
1345             301             302         345          320
2375             305             302         345          320
3126             311             299         305          320

我们可以使用 weathermetrics 包中的 kelvin.to.celsius(无需知道转换因子)进行转换。循环 across 'day' 列并将函数应用于列,并通过分配回同一对象进行更新

library(dplyr)
library(weathermetrics)
df1 <- df1 %>%
    mutate(across(starts_with('day'), kelvin.to.celsius, round = 2))

-输出

df1
Location_ID day1_2010 day2_2010 day3_2010 day4_2010
1        1345     27.85     28.85     71.85     46.85
2        2375     31.85     28.85     71.85     46.85
3        3126     37.85     25.85     31.85     46.85

或者如果数据大就用collapse

library(collapse)
get_vars(df1, regex =TRUE, vars = '^day') <- dapply(get_vars(df1, 
      regex =TRUE, vars = '^day'), MARGIN = 2, kelvin.to.celsius) 

数据

df1 <- structure(list(Location_ID = c(1345L, 2375L, 3126L), day1_2010 = c(301L, 
305L, 311L), day2_2010 = c(302L, 302L, 299L), day3_2010 = c(345L, 
345L, 305L), day4_2010 = c(320L, 320L, 320L)),
 class = "data.frame", row.names = c(NA, 
-3L))

只需从除 ID 列 273.15 以外的所有列中减去。

DF[-1] <- DF[-1] - 273.15
DF
#   Location_ID day1_2010 day2_2010 day3_2010 day4_2010
# 1        1345     27.85     28.85     71.85     46.85
# 2        2375     31.85     28.85     71.85     46.85
# 3        3126     37.85     25.85     31.85     46.85

数据

DF <- structure(list(Location_ID = c(1345L, 2375L, 3126L), day1_2010 = c(301L, 
305L, 311L), day2_2010 = c(302L, 302L, 299L), day3_2010 = c(345L, 
345L, 305L), day4_2010 = c(320L, 320L, 320L)), class = "data.frame", row.names = c(NA, 
-3L))

一种tidyverse方法,您可以在其中定义自己的函数

library(dplyr)

your_data_frame %>%
  mutate(across(.cols = starts_with('day'),.fns = function(x) x - 273.15))

Location_ID day1_2010 day2_2010 day3_2010 day4_2010
1        1345     27.85     28.85     71.85     46.85
2        2375     31.85     28.85     71.85     46.85
3        3126     37.85     25.85     31.85     46.85