如何根据组中位数更改数据中的值
How to change values in data depending on group median
一个简单的重现示例
d1 = structure(list(et = c("s", "s"), gg = c("d", "d"), hj = c("f",
"f"), ggh = c("h", "h"), wer = c(23L, 45L)), class = "data.frame", row.names = c(NA,
-2L))
其中 et
、gg
、hj
和 ggh
是分类变量,wer
是度量变量。所以,对于这个类别
et gg hj ggh
s d f h
中位数(按 wer
)为 34
。
还有第二个数据集
d2 <- structure(list(et = "s", gg = "d", hj = "f", ggh = "h", wer = 3L), class = "data.frame", row.names = c(NA,
-1L))
对于这个类别
et gg hj ggh
s d f h
wer
等于 3
如果在数据集 d2
中与 d1 相同类别的值 wer
小于或大于 1 上此类别的 d1 的中位数,那么在 d2 中如何做到这一点该类别中的中位数值。
因此,在这个简单的示例中,d2
中所需的输出将是
et gg hj ggh wer
s d f h 34
因为 d2 数据集中的 3 比 34(d1 中该类别的中位数)小 31。
感谢您的帮助。
您可以计算 d1
的中位数,然后在 d2
上执行 right_join
:
library(dplyr)
d1 %>%
group_by(across(-wer)) %>%
summarise(wer = median(wer), .groups = "drop") %>%
right_join(d2, by = c("et", "gg", "hj", "ggh"), suffix = c("", ".y")) %>%
mutate(wer = ifelse(wer >= wer.y, wer, wer.y), .keep = "unused")
这个returns
# A tibble: 1 x 5
et gg hj ggh wer
<chr> <chr> <chr> <chr> <dbl>
1 s d f h 34
一个简单的重现示例
d1 = structure(list(et = c("s", "s"), gg = c("d", "d"), hj = c("f",
"f"), ggh = c("h", "h"), wer = c(23L, 45L)), class = "data.frame", row.names = c(NA,
-2L))
其中 et
、gg
、hj
和 ggh
是分类变量,wer
是度量变量。所以,对于这个类别
et gg hj ggh
s d f h
中位数(按 wer
)为 34
。
还有第二个数据集
d2 <- structure(list(et = "s", gg = "d", hj = "f", ggh = "h", wer = 3L), class = "data.frame", row.names = c(NA,
-1L))
对于这个类别
et gg hj ggh
s d f h
wer
等于 3
如果在数据集 d2
中与 d1 相同类别的值 wer
小于或大于 1 上此类别的 d1 的中位数,那么在 d2 中如何做到这一点该类别中的中位数值。
因此,在这个简单的示例中,d2
中所需的输出将是
et gg hj ggh wer
s d f h 34
因为 d2 数据集中的 3 比 34(d1 中该类别的中位数)小 31。
感谢您的帮助。
您可以计算 d1
的中位数,然后在 d2
上执行 right_join
:
library(dplyr)
d1 %>%
group_by(across(-wer)) %>%
summarise(wer = median(wer), .groups = "drop") %>%
right_join(d2, by = c("et", "gg", "hj", "ggh"), suffix = c("", ".y")) %>%
mutate(wer = ifelse(wer >= wer.y, wer, wer.y), .keep = "unused")
这个returns
# A tibble: 1 x 5
et gg hj ggh wer
<chr> <chr> <chr> <chr> <dbl>
1 s d f h 34