如何在 r 中改变一个组的一个子集
How to mutate a subset of a group in r
我在 R 中改变我的 df 时遇到问题。我的 df 看起来像这样
df<
I class part datetime value indicator
<int> <chr> <chr> <S3: POSIXct> <dbl> <dbl>
1 1 A part1 2016-12-15 10:43:08 0.12 0
2 1 A part2 2015-11-16 13:52:07 0.15 0
3 1 A part3 2015-11-16 15:37:27 1.20 0
4 2 A part1 2015-11-16 15:43:03 0.78 1
5 2 A part2 2015-11-16 16:01:03 0.14 1
6 2 A part3 2015-11-05 07:10:02 1.40 1
... ... ... ... ... ... ...
我正在尝试删除组指标(0 或 1)中第 1 部分的极端异常值
我试过了
remove_outliers <- function(x, na.rm = TRUE, ...) {
qnt <- quantile(x, probs=c(.25, .75), na.rm = na.rm, ...)
H <- 3.0 * IQR(x, na.rm = na.rm)
y <- x
y[x < (qnt[1] - H)] <- NA
y[x > (qnt[2] + H)] <- NA
y
}
dfNew <- df %>%
group_by(indicator, part) %>%
mutate(value = remove_outliers(value[part="part1"])) %>%
ungroup()
这将删除所有值。我如何才能仅删除第 1 部分的组指标中的极端异常值?
您的代码中有 2 个错误 value[part="part1"] 应该有一个“==”而不是“=”并且放错了位置因为 value[part=="part1"] 比价值。您需要在治疗开始时进行子集化
dfNew <- subset(df,part=="part1") %>%
group_by(indicator, part) %>%
mutate(value = remove_outliers(value)) %>%
ungroup()
得到整个数据集而不只是子集
mutate_cond <- function(.data, condition, ..., envir = parent.frame()) {
condition <- eval(substitute(condition), .data, envir)
.data[condition, ] <- .data[condition, ] %>% mutate(...)
.data
}
dfNew =df %>%
group_by(indicator, part) %>%
mutate_cond(part=="part1",value = remove_outliers(value)) %>%
ungroup()
修改后对我有用
我在 R 中改变我的 df 时遇到问题。我的 df 看起来像这样
df<
I class part datetime value indicator
<int> <chr> <chr> <S3: POSIXct> <dbl> <dbl>
1 1 A part1 2016-12-15 10:43:08 0.12 0
2 1 A part2 2015-11-16 13:52:07 0.15 0
3 1 A part3 2015-11-16 15:37:27 1.20 0
4 2 A part1 2015-11-16 15:43:03 0.78 1
5 2 A part2 2015-11-16 16:01:03 0.14 1
6 2 A part3 2015-11-05 07:10:02 1.40 1
... ... ... ... ... ... ...
我正在尝试删除组指标(0 或 1)中第 1 部分的极端异常值
我试过了
remove_outliers <- function(x, na.rm = TRUE, ...) {
qnt <- quantile(x, probs=c(.25, .75), na.rm = na.rm, ...)
H <- 3.0 * IQR(x, na.rm = na.rm)
y <- x
y[x < (qnt[1] - H)] <- NA
y[x > (qnt[2] + H)] <- NA
y
}
dfNew <- df %>%
group_by(indicator, part) %>%
mutate(value = remove_outliers(value[part="part1"])) %>%
ungroup()
这将删除所有值。我如何才能仅删除第 1 部分的组指标中的极端异常值?
您的代码中有 2 个错误 value[part="part1"] 应该有一个“==”而不是“=”并且放错了位置因为 value[part=="part1"] 比价值。您需要在治疗开始时进行子集化
dfNew <- subset(df,part=="part1") %>%
group_by(indicator, part) %>%
mutate(value = remove_outliers(value)) %>%
ungroup()
得到整个数据集而不只是子集
mutate_cond <- function(.data, condition, ..., envir = parent.frame()) {
condition <- eval(substitute(condition), .data, envir)
.data[condition, ] <- .data[condition, ] %>% mutate(...)
.data
}
dfNew =df %>%
group_by(indicator, part) %>%
mutate_cond(part=="part1",value = remove_outliers(value)) %>%
ungroup()
修改后对我有用