在 R 中设置现有数据框每列的单位
Setting the units of each column of an existing dataframe in R
我有一个包含一堆列的数据框和一个单独的列表,其中包含每列的单位。我觉得以下应该有效:
library(units)
df = data.frame(1:4, 2:5, 3:6)
units = c("mg/L", "pH", "s")
for (i in length(df)){
set_units(df[[i]], units[[i]])
}
但是 set_units()
尝试将 units[[i]]
设置为单位(这并不奇怪,它不是 SI 单位),而不是读取单位的第 i
个值。我也尝试过使用 lapply()
和 mapply()
的各种方法,但无法使其正常工作,并且 google 没有提出任何相关的内容。
你可以做到
df = data.frame(1:4, 2:5, 3:6)
units = c("mg/L", "pH", "s")
for(i in 1:ncol(df)){
units(df[ , i]) <- units[i]
}
df
X1.4 X2.5 X3.6
1 1 [mg/L] 2 [pH] 3 [s]
2 2 [mg/L] 3 [pH] 4 [s]
3 3 [mg/L] 4 [pH] 5 [s]
4 4 [mg/L] 5 [pH] 6 [s]
您提供的代码存在不同的问题。首先,i in length(df)
不会使用 i
的每个列号,而只会使用您的情况下的数字 3
。其次,我不知道 set_units()
函数,但除此之外,此函数的输出未分配给循环中的任何对象。第三,这里不需要 double [[]]
。最后,您可以按照 package documentation:
中的描述使用 units()
# The easiest way to assign units to a numeric vector is like this:
x <- y <- 1:4
units(x) <- "m/s" # meters / second
根据文档,set_units()
是一个 pipe-friendly 函数,默认情况下期望单位作为符号传递。对于标准评估,使用参数 mode = "standard"
.
library(units)
library(purrr)
df = data.frame(1:4, 2:5, 3:6)
units = c("mg/L", "pH", "s")
df %>%
map2_dfc(units, ~set_units(.x, .y, mode = "standard"))
# A tibble: 4 x 3
X1.4 X2.5 X3.6
[mg/L] [pH] [s]
1 1 2 3
2 2 3 4
3 3 4 5
4 4 5 6
我有一个包含一堆列的数据框和一个单独的列表,其中包含每列的单位。我觉得以下应该有效:
library(units)
df = data.frame(1:4, 2:5, 3:6)
units = c("mg/L", "pH", "s")
for (i in length(df)){
set_units(df[[i]], units[[i]])
}
但是 set_units()
尝试将 units[[i]]
设置为单位(这并不奇怪,它不是 SI 单位),而不是读取单位的第 i
个值。我也尝试过使用 lapply()
和 mapply()
的各种方法,但无法使其正常工作,并且 google 没有提出任何相关的内容。
你可以做到
df = data.frame(1:4, 2:5, 3:6)
units = c("mg/L", "pH", "s")
for(i in 1:ncol(df)){
units(df[ , i]) <- units[i]
}
df
X1.4 X2.5 X3.6
1 1 [mg/L] 2 [pH] 3 [s]
2 2 [mg/L] 3 [pH] 4 [s]
3 3 [mg/L] 4 [pH] 5 [s]
4 4 [mg/L] 5 [pH] 6 [s]
您提供的代码存在不同的问题。首先,i in length(df)
不会使用 i
的每个列号,而只会使用您的情况下的数字 3
。其次,我不知道 set_units()
函数,但除此之外,此函数的输出未分配给循环中的任何对象。第三,这里不需要 double [[]]
。最后,您可以按照 package documentation:
units()
# The easiest way to assign units to a numeric vector is like this:
x <- y <- 1:4
units(x) <- "m/s" # meters / second
根据文档,set_units()
是一个 pipe-friendly 函数,默认情况下期望单位作为符号传递。对于标准评估,使用参数 mode = "standard"
.
library(units)
library(purrr)
df = data.frame(1:4, 2:5, 3:6)
units = c("mg/L", "pH", "s")
df %>%
map2_dfc(units, ~set_units(.x, .y, mode = "standard"))
# A tibble: 4 x 3
X1.4 X2.5 X3.6
[mg/L] [pH] [s]
1 1 2 3
2 2 3 4
3 3 4 5
4 4 5 6