gpt4 book ai didi

使用 mutate_at 的逐行操作

转载 作者:行者123 更新时间:2023-12-04 09:22:18 26 4
gpt4 key购买 nike

使用 dplyr , 有没有办法在不使用 rowwise() 的情况下逐行选择性地改变列?

例如,给定下面的输入,我想在以“pre_”为前缀的列中用零替换负数:

df <- data.frame(a=c(-5, 3, 4, 5), b=4:1, pre_c=c(-1, -5, 3, 10), pre_d=c(-6, 5, -12, 0))
# a b pre_c pre_d
# 1 -5 4 -1 -6
# 2 3 3 -5 5
# 3 4 2 3 -12
# 4 5 1 10 0

我想要的输出是:
#    a b pre_c pre_d
# 1 -5 4 0 0
# 2 3 3 0 5
# 3 4 2 3 0
# 4 5 1 10 0

这可以通过 rowwise() 实现和 mutate_at() :
df %>% 
rowwise() %>%
mutate_at(vars(starts_with("pre_")), funs(max(0, .)))

有没有另一种方法可以做到这一点?

最佳答案

您可以使用 pmax (或 replace )没有 rowwise

library(dplyr)
df %>%
mutate_at(vars(starts_with("pre_")), list(~pmax(0, .)))
a b pre_c pre_d
1 -5 4 0 0
2 3 3 0 5
3 4 2 3 0
4 5 1 10 0

使用 base R
df[startsWith(names(df), "pre_")][df[startsWith(names(df), "pre_")] < 0] <- 0

关于使用 mutate_at 的逐行操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55502440/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com