如何使用 purrr 替换 R 中的修改 for 循环?
How to use purrr to replace a modifying for loop in R?
我有一个这样的数据框:
df <- data.frame(
Group = c('A', 'B', 'C', 'A', 'B', 'C', 'A', 'B', 'C'),
Value = c(12, 88, 54, 76, 23, 44, 60, 52, 18)
)
我想将每个组缩放到中位数 100,并用新值替换 Value
列,因此数据框如下所示:
df_desired <- data.frame(
Group = c('A', 'B', 'C', 'A', 'B', 'C', 'A', 'B', 'C'),
Value = c(20, 169.23, 122.73, 126.67, 44.23, 100, 100, 100, 40.91)
)
像这样使用 scale_helper:
scale_helper <- function(x, value) x * value / median(x)
我可以用 for
循环来做到这一点,但如果可能的话,我想改用 purrr
。有没有使用 purrr
的直接方法,或者 for
循环是更好的方法?
loop for 不是个好办法,但我不明白你为什么要用purr。我觉得,这个版本不错:
df %>% group_by(Group) %>% mutate(Value = scale_helper(Value, 100)) %>% as.data.frame()
或者您可以使用 data.table。像这样:
as.data.table(df)[, lapply(.SD, scale_helper, 100), keyby = Group]
我有一个这样的数据框:
df <- data.frame(
Group = c('A', 'B', 'C', 'A', 'B', 'C', 'A', 'B', 'C'),
Value = c(12, 88, 54, 76, 23, 44, 60, 52, 18)
)
我想将每个组缩放到中位数 100,并用新值替换 Value
列,因此数据框如下所示:
df_desired <- data.frame(
Group = c('A', 'B', 'C', 'A', 'B', 'C', 'A', 'B', 'C'),
Value = c(20, 169.23, 122.73, 126.67, 44.23, 100, 100, 100, 40.91)
)
像这样使用 scale_helper:
scale_helper <- function(x, value) x * value / median(x)
我可以用 for
循环来做到这一点,但如果可能的话,我想改用 purrr
。有没有使用 purrr
的直接方法,或者 for
循环是更好的方法?
loop for 不是个好办法,但我不明白你为什么要用purr。我觉得,这个版本不错:
df %>% group_by(Group) %>% mutate(Value = scale_helper(Value, 100)) %>% as.data.frame()
或者您可以使用 data.table。像这样:
as.data.table(df)[, lapply(.SD, scale_helper, 100), keyby = Group]