基于R中的行的其余部分替换变量的值

基于R中的行的其余部分替换变量的值,r,for-loop,R,For Loop,我有一个变量,它的值取同一行中其他变量的最大值。我使用了一个for循环,它完成了这项工作,但有220000次观察,效率相当低 for (i in 1:nrow(df)) { x <- c(df$var1[i], df$var2[i], df$var3[i], df$var4[i]) df$var5[i] <- max(x) } for(1中的i:nrow(df)){ x使用应用行方式: df$max <- apply(df, 1, max) df$max如果我理解正

我有一个变量,它的值取同一行中其他变量的最大值。我使用了一个for循环,它完成了这项工作,但有220000次观察,效率相当低

for (i in 1:nrow(df)) {
  x <- c(df$var1[i], df$var2[i], df$var3[i], df$var4[i])
  df$var5[i] <- max(x)
}
for(1中的i:nrow(df)){

x使用
应用
行方式:

df$max <- apply(df, 1, max)

df$max如果我理解正确,那么您希望获得数据帧的rowmax。
下面是一个iris数据集的示例。
使用
do.call
pmax

iris %>% 
  mutate(my_max_row = do.call(pmax, c(select(., (where(is.numeric))), na.rm = TRUE)))
使用
应用

iris %>% mutate(my_max_row = apply(select(., (where(is.numeric))), 1, max)) 
输出:

   Sepal.Length Sepal.Width Petal.Length Petal.Width    Species my_max_row
1            5.1         3.5          1.4         0.2     setosa        5.1
2            4.9         3.0          1.4         0.2     setosa        4.9
3            4.7         3.2          1.3         0.2     setosa        4.7
4            4.6         3.1          1.5         0.2     setosa        4.6
5            5.0         3.6          1.4         0.2     setosa        5.0
6            5.4         3.9          1.7         0.4     setosa        5.4
7            4.6         3.4          1.4         0.3     setosa        4.6
8            5.0         3.4          1.5         0.2     setosa        5.0
9            4.4         2.9          1.4         0.2     setosa        4.4
10           4.9         3.1          1.5         0.1     setosa        4.9

这是一种data.table方法

DT[, var1234_min := do.call(pmax,.SD), .SDcols = patterns("var[1-4]")]
样本数据

library(data.table)
set.seed(123)
n = 10
DT <- data.table( id = 1:10, 
                  var1 = rnorm(n),
                  var2 = rnorm(n),
                  var3 = rnorm(n),
                  var4 = rnorm(n),
                  var5 = rnorm(n))
#    id        var1       var2       var3        var4        var5
# 1:  1 -0.56047565  1.2240818 -1.0678237  0.42646422 -0.69470698
# 2:  2 -0.23017749  0.3598138 -0.2179749 -0.29507148 -0.20791728
# 3:  3  1.55870831  0.4007715 -1.0260044  0.89512566 -1.26539635
# 4:  4  0.07050839  0.1106827 -0.7288912  0.87813349  2.16895597
# 5:  5  0.12928774 -0.5558411 -0.6250393  0.82158108  1.20796200
# 6:  6  1.71506499  1.7869131 -1.6866933  0.68864025 -1.12310858
# 7:  7  0.46091621  0.4978505  0.8377870  0.55391765 -0.40288484
# 8:  8 -1.26506123 -1.9666172  0.1533731 -0.06191171 -0.46665535
# 9:  9 -0.68685285  0.7013559 -1.1381369 -0.30596266  0.77996512
#10: 10 -0.44566197 -0.4727914  1.2538149 -0.38047100 -0.08336907
库(data.table)
种子集(123)
n=10

DT你可以通过编辑你的问题的dput(head(df))
的输出来分享一个小样本的
df
。谢谢。这样做了!虽然我使用了例如
。SDcols=c(“var1”,“var4”)
来表示我只想使用几个变量(而不是行中或1-4范围内的所有变量)。谢谢!