在 R 中添加最小行
Add Min Row in R
我已经阅读了很多类似的问题,但无法使任何代码正常工作。我只是想在我的数据框 (df) 的底部添加一行,该行具有列 2:8 的每列的最小值。下面是我添加总行的代码(有效),但我想要一个最小行。
df[(nrow(df)+ 1),(2:8)] <- colSums(df[,2:8], na.rm=TRUE)
我试图让 matrixStats 包中的 colMins 工作,但由于某种原因不能。如有任何帮助,我们将不胜感激!
我们可以尝试 colMins
从 library(matrixStats)
library(matrixStats)
rbind(df, c(NA,colMins(as.matrix(df[2:8]))))
更新
将NA
替换为'MIN',
rbind(df, c('MIN',as.list(colMins(as.matrix(df[2:8])))))
或者另一种方法是转换为 matrix
并使用 addmargins
addmargins(`row.names<-`(as.matrix(df[-1]), df$ID), 1, FUN=min)
数据
set.seed(24)
df <- cbind(ID= 1:10,as.data.frame(matrix(sample(1:9, 7*10,
replace=TRUE), ncol=7)))
在 base R 中,您可以使用 sapply()
创建列最小值的原子向量,然后 rbind()
将其附加到原始数据。我为第一个值添加了一个 NA
,因为我们需要将其添加到原始数据中。
rbind(df, c(NA, sapply(df[2:8], min, na.rm = TRUE)))
显然这假设只有 8 列,因此可以使用 df[-1]
代替 df[2:8]
。
为了提高速度,我们可以使用 vapply()
而不是 sapply()
,因为我们知道结果将是单个数值。
rbind(df, c(NA, vapply(df[-1], min, 1, na.rm = TRUE)))
更新: 回应您对其他答案的评论 - 要在第一列中获得 "MIN"
并在所有其余列中获得最小值,我们可以调整调用命名列表并一次性完成所有操作。这样我们就不会混合 类 列(字符和数字)并最终在结果数据的列中出现意外的 类。
rbind(
df,
c(setNames(list("MIN"), names(df)[1]), lapply(df[-1], min, na.rm = TRUE))
)
我已经阅读了很多类似的问题,但无法使任何代码正常工作。我只是想在我的数据框 (df) 的底部添加一行,该行具有列 2:8 的每列的最小值。下面是我添加总行的代码(有效),但我想要一个最小行。
df[(nrow(df)+ 1),(2:8)] <- colSums(df[,2:8], na.rm=TRUE)
我试图让 matrixStats 包中的 colMins 工作,但由于某种原因不能。如有任何帮助,我们将不胜感激!
我们可以尝试 colMins
从 library(matrixStats)
library(matrixStats)
rbind(df, c(NA,colMins(as.matrix(df[2:8]))))
更新
将NA
替换为'MIN',
rbind(df, c('MIN',as.list(colMins(as.matrix(df[2:8])))))
或者另一种方法是转换为 matrix
并使用 addmargins
addmargins(`row.names<-`(as.matrix(df[-1]), df$ID), 1, FUN=min)
数据
set.seed(24)
df <- cbind(ID= 1:10,as.data.frame(matrix(sample(1:9, 7*10,
replace=TRUE), ncol=7)))
在 base R 中,您可以使用 sapply()
创建列最小值的原子向量,然后 rbind()
将其附加到原始数据。我为第一个值添加了一个 NA
,因为我们需要将其添加到原始数据中。
rbind(df, c(NA, sapply(df[2:8], min, na.rm = TRUE)))
显然这假设只有 8 列,因此可以使用 df[-1]
代替 df[2:8]
。
为了提高速度,我们可以使用 vapply()
而不是 sapply()
,因为我们知道结果将是单个数值。
rbind(df, c(NA, vapply(df[-1], min, 1, na.rm = TRUE)))
更新: 回应您对其他答案的评论 - 要在第一列中获得 "MIN"
并在所有其余列中获得最小值,我们可以调整调用命名列表并一次性完成所有操作。这样我们就不会混合 类 列(字符和数字)并最终在结果数据的列中出现意外的 类。
rbind(
df,
c(setNames(list("MIN"), names(df)[1]), lapply(df[-1], min, na.rm = TRUE))
)