如何仅对特定行进行突变?

时间:2020-07-13 02:06:51

标签: r rows mutate

例如,如何在具有100行的数据集中将25至45的行除以2?

2 个答案:

答案 0 :(得分:2)

BOD是一个内置的6x2数据框,其列均为数字。这些解决方案需要dplyr 1.0.0或更高版本。

1)(行),它检查行号是否在3到5之间(含3和5),如果是,则除以2,否则不行。如果某些列不是数字列,则将everything()替换为where(is.numeric),以便该除法仅适用于数字列。

library(dplyr)

BOD %>% mutate(across(everything(), ~ if_else(row_number() %in% 3:5, ./2, .)))

2)此替代方法使用了magrittr的%<>%运算符,但是它确实会覆盖BOD,因为它将保留BOD的修改版本,而上面的保留它并返回结果。

library(dplyr)
library(magrittr)

BOD[3:5, ] %<>% mutate(across(everything(), ~ ./2))

答案 1 :(得分:1)

您可以对范围内的行进行子集,划分和替换。

rows <- 25:45
df[rows, ] <- df[rows, ]/2

以可复制的示例将行号3划分为4。

set.seed(456)
df <- data.frame(a = sample(100, 5), b = sample(100, 5))
df
#   a  b
#1 35 78
#2 38 31
#3 85 73
#4 27 79
#5 25 90

rows <- 3:4
df[rows, ] <- df[rows, ]/2
df
#     a    b
#1 35.0 78.0
#2 38.0 31.0
#3 42.5 36.5
#4 13.5 39.5
#5 25.0 90.0