web-dev-qa-db-ja.com

Rのデータフレームを持つ各行の最小

データフレーム内の複数の列で単純な最小化を試みていますが、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
11
Rob

applyを使用して各行を調べることができます

apply(df, 1, FUN=min)

1はdfの各行にFUNを適用することを意味し、2は列にFUNを適用することを意味します。

21
nico

値のセットの並列最小値を見つける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))
3
Rich Scriven

library(matrixStats)からrowMinsを使用することもできます

library(matrixStats)
df$minIwant <- rowMins(as.matrix(df))
2
akrun

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.
1