在数据框上查找最大值和最小值,忽略 NA
Find max and min value on a dataframe, ignoring NAs
我需要像这样在数据框“df”中找到最大值和最小值:
col1 col2 col3
7 4 5
2 NA 6
3 2 4
NA NA 1
结果应为:最小值 = 1,最大值 = 7。
我用过这个功能:
min <- min(df, na.rm=TRUE)
max <- max(df, na.rm=TRUE)
但它给了我以下错误:
Error in FUN(X[[i]], ...) :
only defined on a data frame with all numeric variables
所以我把所有的值as.numeric转换成这样:
df <- as.numeric(as.character(df))
但它通过强制引入 NA,现在的结果是:
min = -Inf 和 max=Inf
如何在忽略 NA 的情况下对 df 进行操作?
如果列不是numeric
,请将其转换为type.convert
df <- type.convert(df, as.is = TRUE)
或者使用matrix
路由的强制转换
df[] <- as.numeric(as.matrix(df))
或 lapply
df[] <- lapply(df, function(x) as.numeric(as.character(x)))
有了R 4.1.0
我们也可以做到
sapply(df, \(x) as.numeric(as.character(x))) |>
range(na.rm = TRUE)
#[1] 1 7
列为 numeric
后,函数按预期工作
min(df, na.rm = TRUE)
#[1] 1
max(df, na.rm = TRUE)
#[1] 7
请注意 as.character/as.numeric
需要 vector
输入而不是 data.frame
另一个基础 R 选项
> range(na.omit(as.numeric(unlist(df))))
[1] 1 7
如果是factor
class,你应该使用(感谢@akrun的评论)
as.numeric(as.character(unlist(df)))
我们可以使用 dataMaid
包中的 minMax
函数(处理 NA)
library(dataMaid)
minMax(df, maxDecimals = 2)
输出:
Min. and max.: 2; 7
数据:
df <- tribble(
~col1, ~col2, ~col3,
7, 4, 5,
2, NA, 6,
3, 2, 4,
NA, NA, 1)
我需要像这样在数据框“df”中找到最大值和最小值:
col1 col2 col3
7 4 5
2 NA 6
3 2 4
NA NA 1
结果应为:最小值 = 1,最大值 = 7。 我用过这个功能:
min <- min(df, na.rm=TRUE)
max <- max(df, na.rm=TRUE)
但它给了我以下错误:
Error in FUN(X[[i]], ...) :
only defined on a data frame with all numeric variables
所以我把所有的值as.numeric转换成这样:
df <- as.numeric(as.character(df))
但它通过强制引入 NA,现在的结果是: min = -Inf 和 max=Inf
如何在忽略 NA 的情况下对 df 进行操作?
如果列不是numeric
,请将其转换为type.convert
df <- type.convert(df, as.is = TRUE)
或者使用matrix
路由的强制转换
df[] <- as.numeric(as.matrix(df))
或 lapply
df[] <- lapply(df, function(x) as.numeric(as.character(x)))
有了R 4.1.0
我们也可以做到
sapply(df, \(x) as.numeric(as.character(x))) |>
range(na.rm = TRUE)
#[1] 1 7
列为 numeric
后,函数按预期工作
min(df, na.rm = TRUE)
#[1] 1
max(df, na.rm = TRUE)
#[1] 7
请注意 as.character/as.numeric
需要 vector
输入而不是 data.frame
另一个基础 R 选项
> range(na.omit(as.numeric(unlist(df))))
[1] 1 7
如果是factor
class,你应该使用(感谢@akrun的评论)
as.numeric(as.character(unlist(df)))
我们可以使用 dataMaid
包中的 minMax
函数(处理 NA)
library(dataMaid)
minMax(df, maxDecimals = 2)
输出:
Min. and max.: 2; 7
数据:
df <- tribble(
~col1, ~col2, ~col3,
7, 4, 5,
2, NA, 6,
3, 2, 4,
NA, NA, 1)