在 R: 中,只需更改一行中的最大值

In R: way to just change the max value in a row

提问人:confusedindividual 提问时间:4/13/2022 最后编辑:AndrewGBconfusedindividual 更新时间:4/13/2022 访问量:169

问:

我正在尝试更改 R 中一列中特定行的值(从原始值减去 1),这恰好是最后一行,它也将始终是最大值,因为该列始终从最小值到最大值排序。

Example data.frame  
    col_a 
 1  27
 2  29 
 3  35 
 4  42
 5  56
>Example Output:  
    col_a 
 1  27
 2  29 
 3  35 
 4  42
 5  55
R 最大 最小值

评论

4赞 akrun 4/13/2022
df$col_a[nrow(df)] <- df$col_a[nrow(df)]-1

答:

2赞 TarJae 4/13/2022 #1

这是一个解决方案:dplyr

要将更改应用于最后一行,首先使用 ,这将确保最大值位于最后一行,然后使用带有 function 的语句:arrangeifelselast()

library(dplyr)

df %>% 
  arrange(col_a) %>% 
  mutate(col_a = ifelse(col_a == last(col_a), col_a-1, col_a))
  col_a
1    27
2    29
3    35
4    42
5    55
2赞 AndrewGB 4/13/2022 #2

这是一个选项,我们使用 use 来更改 中的最后一个值。data.tablemult='last'col_a

library(data.table)
dt <- as.data.table(df)

dt[unique(.N), col_a := col_a - 1, mult = 'last']

输出

   col_a
1:    27
2:    29
3:    35
4:    42
5:    55

数据

df <- structure(list(col_a = c(27L, 29L, 35L, 42L, 56L)), class = "data.frame", row.names = c(NA, 
-5L))