【问题标题】:How can I mutate only specific rows? [closed]我怎样才能只改变特定的行? [关闭]
【发布时间】:2020-07-13 02:06:51
【问题描述】:

例如,在一个有 100 行的数据集上,如何仅将 25 到 45 的行除以 2?

【问题讨论】:

  • 请提供一个完整的例子。
  • 如果您包含一个简单的reproducible example,其中包含可用于测试和验证可能解决方案的示例输入和所需输出,则更容易为您提供帮助。

标签: r rows dplyr


【解决方案1】:

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

1) 检查行号是否在 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 的修改版本,而上述保留它并返回结果。 p>

library(dplyr)
library(magrittr)

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

【讨论】:

    【解决方案2】:

    您可以对范围内的行进行子集化、分割和替换。

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-10-01
      • 1970-01-01
      • 2020-12-26
      • 2020-09-15
      • 2022-07-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多