我尝试在数据框中的多个列中执行一个简单的最小值,但min函数会自动在整个每列中返回min,而不是分别为每一行返回min。我确定我在这里错过了一些非常简单的东西吗?任何想法都非常赞赏。
x<-c(1,2,7)
y<-c(1,5,4)
minIwant <- c(1,2,4)
df <- data.frame(x,y,minIwant)
df$minIget <- min(df$x,df$y)
df
x y minIwant minIget
1 1 1 1 1
2 2 5 2 1
3 7 4 4 1
答案 0 :(得分:20)
您可以使用apply
浏览每一行
apply(df, 1, FUN=min)
其中1表示对每行df应用FUN,2表示将FUN应用于列。
答案 1 :(得分:3)
我们可以使用pmin
,它找到一组值的平行最小值。由于我们的df
从技术上讲是一个列表,因此我们需要通过do.call
来运行它。
df$min <- do.call(pmin, df)
给出
df
# x y min
# 1 1 1 1
# 2 2 5 2
# 3 7 4 4
数据:
df <- data.frame(x = c(1, 2, 7), y = c(1, 5, 4))
此外,如果需要na.rm = TRUE
,您可以
df$min <- do.call(pmin, c(df, na.rm = TRUE))
答案 2 :(得分:2)
我们也可以使用rowMins
library(matrixStats)
library(matrixStats)
df$minIwant <- rowMins(as.matrix(df))
答案 3 :(得分:1)
只想添加如何使用dplyr执行此操作。
library(dplyr)
x<-c(1,2,7)
y<-c(1,5,4)
df <- data.frame(x,y)
df %>% rowwise() %>% mutate(minIget = min(x, y))
# A tibble: 3 x 3
x y minIget
<dbl> <dbl> <dbl>
1 1. 1. 1.
2 2. 5. 2.
3 7. 4. 4.