データフレーム内の複数の列で単純な最小化を試みていますが、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
apply
を使用して各行を調べることができます
apply(df, 1, FUN=min)
1はdfの各行にFUNを適用することを意味し、2は列にFUNを適用することを意味します。
値のセットの並列最小値を見つける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))
library(matrixStats)
からrowMins
を使用することもできます
library(matrixStats)
df$minIwant <- rowMins(as.matrix(df))
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.