【发布时间】:2020-07-13 02:06:51
【问题描述】:
例如,在一个有 100 行的数据集上,如何仅将 25 到 45 的行除以 2?
【问题讨论】:
-
请提供一个完整的例子。
-
如果您包含一个简单的reproducible example,其中包含可用于测试和验证可能解决方案的示例输入和所需输出,则更容易为您提供帮助。
例如,在一个有 100 行的数据集上,如何仅将 25 到 45 的行除以 2?
【问题讨论】:
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))
【讨论】:
您可以对范围内的行进行子集化、分割和替换。
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
【讨论】: