这是一个示例:
df <- structure(list(Longitud = c(-179.75, -179.75, -179.75, -179.75,
-179.75, -179.75), Latitud = c(71.25, 68.75, 68.25, 67.75, 67.25,
66.75), Enero = c(-23, -26, -25.9, -24.1, -24.8, -21), Febrero = c(-25.7,
-28.7, -27.6, -25, -24.8, -20.1), Marzo = c(-24.3, -26.7, -25.9,
-23.5, -24, -20.3), Abril = c(-17.9, -20, -19.3, -17.1, -17.4,
-13), Mayo = c(-7.1, -7.8, -8.6, -7.7, -9.1, -5.8), Junio = c(-0.1,
0.1, 0, 1.2, -0.4, 2.6), Julio = c(1.8, 3, 2.9, 4.5, 3.4, 6.7
), Agosto = c(1.4, 1.7, 2, 3.8, 3, 6.8), Septimbre = c(-1.7,
-1.9, -1.8, -0.2, -1.6, 1.4), Octubre = c(-8.2, -10.4, -9.7,
-7.6, -8.4, -5), Noviembre = c(-15.6, -18.2, -17.5, -15.3, -16,
-12.4), Diciembre = c(-22.2, -25.5, -24.5, -22.2, -22.4, -18.2
)), .Names = c("Longitud", "Latitud", "Enero", "Febrero", "Marzo",
"Abril", "Mayo", "Junio", "Julio", "Agosto", "Septimbre", "Octubre",
"Noviembre", "Diciembre"), row.names = c(NA, 6L), class = "data.frame")
从Enero
到Diciembre
的列是数字。我想在这些列中的所有这些值中添加符号摄氏 最后 (º
(。但是我想在不将列转换为字符的情况下添加它,以便我可以继续使用数字。
有没有办法打印这个符号并保持数字类型?
units
包 (https://r-quantities.github.io/units( 用于打印数字数据,但也通过算术操作传播它们。它不会更改基础数据(例如c(1, 2, 3)
( 从数字开始,它只是添加了类属性以使额外的打印/格式化魔术发生。
例如:
library(units)
#> udunits system database from /Library/Frameworks/R.framework/Versions/3.6/Resources/library/units/share/udunits
library(dplyr)
#> ...truncated usual dplyr noises
x <- 1:4
units(x) <- "meters"
x
#> Units: [m]
#> [1] 1 2 3 4
y <- 2:5
units(y) <- "seconds"
y
#> Units: [s]
#> [1] 2 3 4 5
x/y
#> Units: [m/s]
#> [1] 0.5000000 0.6666667 0.7500000 0.8000000
str(x/y)
#> Object of class units:
#> num [1:4] 0.5 0.667 0.75 0.8
#> - attr(*, "units")=List of 2
#> ..$ numerator : chr "m"
#> ..$ denominator: chr "s"
#> ..- attr(*, "class")= chr "symbolic_units"
因此,您可以看到x
和y
保留其数值,并且不强制使用字符。但他们仍然与他们的单位一起打印。您也可以在数据框中执行此操作(原版data.frame
和现代整洁tibble
(:
# For example, with dummy numbers
# https://en.wikipedia.org/wiki/Heat_transfer_coefficient
data.frame(
T1 = set_units(1:3, "degree_C"),
T2 = set_units(5:7, "degree_C"),
A = set_units(1000:1002, "centimeters^2"),
h = set_units(2:4, "W/(meter^2*degree_c)")
) %>%
mutate(Q = h*A*(T2-T1))
#> T1 T2 A h Q
#> 1 1 [°C] 5 [°C] 1000 [centimeters^2] 2 [W/°C/m^2] 0.8000 [W]
#> 2 2 [°C] 6 [°C] 1001 [centimeters^2] 3 [W/°C/m^2] 1.2012 [W]
#> 3 3 [°C] 7 [°C] 1002 [centimeters^2] 4 [W/°C/m^2] 1.6032 [W]
tibble(
T1 = set_units(1:3, "degree_C"),
T2 = set_units(5:7, "degree_C"),
A = set_units(1000:1002, "centimeters^2"),
h = set_units(2:4, "W/(meter^2*degree_c)")
) %>%
mutate(Q = h*A*(T2-T1))
#> # A tibble: 3 x 5
#> T1 T2 A h Q
#> [°C] [°C] [centimeters^2] [W/°C/m^2] [W]
#> 1 1 5 1000 2 0.8000
#> 2 2 6 1001 3 1.2012
#> 3 3 7 1002 4 1.6032
请注意,两个类之间的打印方法不同。对于data.frame
秒,单位在每次输入后打印。对于tibble
秒,单位仅打印在每列的顶部。
我们可以像这样使用您的原始数据:
df <-
structure(
list(
Longitud = c(-179.75,-179.75,-179.75,-179.75,-179.75,-179.75),
Latitud = c(71.25, 68.75, 68.25, 67.75, 67.25, 66.75),
Enero = c(-23,-26,-25.9,-24.1,-24.8,-21),
Febrero = c(-25.7,-28.7,-27.6,-25,-24.8,-20.1),
Marzo = c(-24.3,-26.7,-25.9,-23.5,-24,-20.3),
Abril = c(-17.9,-20,-19.3,-17.1,-17.4,-13),
Mayo = c(-7.1,-7.8,-8.6,-7.7,-9.1,-5.8),
Junio = c(-0.1, 0.1, 0, 1.2,-0.4, 2.6),
Julio = c(1.8, 3, 2.9, 4.5, 3.4, 6.7),
Agosto = c(1.4, 1.7, 2, 3.8, 3, 6.8),
Septimbre = c(-1.7,-1.9,-1.8,-0.2,-1.6, 1.4),
Octubre = c(-8.2,-10.4,-9.7,-7.6,-8.4,-5),
Noviembre = c(-15.6,-18.2,-17.5,-15.3,-16,-12.4),
Diciembre = c(-22.2,-25.5,-24.5,-22.2,-22.4,-18.2)
),
.Names = c(
"Longitud", "Latitud",
"Enero", "Febrero", "Marzo",
"Abril", "Mayo", "Junio",
"Julio", "Agosto", "Septimbre",
"Octubre", "Noviembre", "Diciembre"
),
row.names = c(NA, 6L),
class = "data.frame"
)
# class "data.frame"
df %>%
mutate_at(vars(Enero:Diciembre), ~set_units(., "degree_C"))
#> Longitud Latitud Enero Febrero Marzo Abril Mayo
#> 1 -179.75 71.25 -23.0 [°C] -25.7 [°C] -24.3 [°C] -17.9 [°C] -7.1 [°C]
#> 2 -179.75 68.75 -26.0 [°C] -28.7 [°C] -26.7 [°C] -20.0 [°C] -7.8 [°C]
#> 3 -179.75 68.25 -25.9 [°C] -27.6 [°C] -25.9 [°C] -19.3 [°C] -8.6 [°C]
#> 4 -179.75 67.75 -24.1 [°C] -25.0 [°C] -23.5 [°C] -17.1 [°C] -7.7 [°C]
#> 5 -179.75 67.25 -24.8 [°C] -24.8 [°C] -24.0 [°C] -17.4 [°C] -9.1 [°C]
#> 6 -179.75 66.75 -21.0 [°C] -20.1 [°C] -20.3 [°C] -13.0 [°C] -5.8 [°C]
#> Junio Julio Agosto Septimbre Octubre Noviembre Diciembre
#> 1 -0.1 [°C] 1.8 [°C] 1.4 [°C] -1.7 [°C] -8.2 [°C] -15.6 [°C] -22.2 [°C]
#> 2 0.1 [°C] 3.0 [°C] 1.7 [°C] -1.9 [°C] -10.4 [°C] -18.2 [°C] -25.5 [°C]
#> 3 0.0 [°C] 2.9 [°C] 2.0 [°C] -1.8 [°C] -9.7 [°C] -17.5 [°C] -24.5 [°C]
#> 4 1.2 [°C] 4.5 [°C] 3.8 [°C] -0.2 [°C] -7.6 [°C] -15.3 [°C] -22.2 [°C]
#> 5 -0.4 [°C] 3.4 [°C] 3.0 [°C] -1.6 [°C] -8.4 [°C] -16.0 [°C] -22.4 [°C]
#> 6 2.6 [°C] 6.7 [°C] 6.8 [°C] 1.4 [°C] -5.0 [°C] -12.4 [°C] -18.2 [°C]
# classes "tbl_df" "tbl" "data.frame"
df %>%
as_tibble() %>%
mutate_at(vars(Enero:Diciembre), ~set_units(., "degree_C"))
#> # A tibble: 6 x 14
#> Longitud Latitud Enero Febrero Marzo Abril Mayo Junio
#> <dbl> <dbl> [°C] [°C] [°C] [°C] [°C] [°C]
#> 1 -180. 71.2 -23.0 -25.7 -24.3 -17.9 -7.1 -0.1
#> 2 -180. 68.8 -26.0 -28.7 -26.7 -20.0 -7.8 0.1
#> 3 -180. 68.2 -25.9 -27.6 -25.9 -19.3 -8.6 0.0
#> 4 -180. 67.8 -24.1 -25.0 -23.5 -17.1 -7.7 1.2
#> 5 -180. 67.2 -24.8 -24.8 -24.0 -17.4 -9.1 -0.4
#> 6 -180. 66.8 -21.0 -20.1 -20.3 -13.0 -5.8 2.6
#> # … with 6 more variables: Julio [°C], Agosto [°C], Septimbre [°C],
#> # Octubre [°C], Noviembre [°C], Diciembre [°C]
同样,您可以看到两个包之间的打印方法不同。您还可以自定义选项,使其°C
而不是[°C]
:
units_options(sep = c("", ""), group = c("", ""))
data.frame(x = set_units(35:38, "degree_C"))
#> x
#> 1 35 °C
#> 2 36 °C
#> 3 37 °C
#> 4 38 °C
创建于 2019-11-30 由 reprex 软件包 (v0.3.0(
我们可以使用paste
或str_c
. 该符号不会被识别为numeric
,因此它会将列转换为character
library(dplyr)
library(stringr)
df %>%
mutate_at(vars(Enero:Diciembre), ~ str_c(., "º"))
或base R
df[3:ncol(df)] <- lapply(df[3:ncol(df)], paste0, "º")