如何将 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
我有一个包含 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