非常感谢您在使用mutate_at
方面的帮助。
我想将一个值乘以相应行的总和。但是,第一列包含ID,因此应将其忽略。它应该朝以下方向发展,但我做对了。
library("dplyr")
df <- data.frame(id = c(101,102,103,104),
t_1 = sample(0:100, 4)/100,
t_2 = sample(0:100, 4)/100,
t_3 = sample(0:100, 4)/100,
t_4 = sample(0:100, 4)/100)
df %>% mutate_at(vars(starts_with("t_")),
funs(adjusted = 1/rowSums(select(., starts_with("t_")))*.))
有人知道什么建议吗?预先谢谢你!
答案 0 :(得分:0)
嗨,
这是一些没有mutate_at
的解决方案:
nominator <- apply(df[,-1], 1, sum)
df[,-1] <- df[,-1]/nominator
这将首先将行总和计算为nominator
,并将df
的每个行条目(第一个条目除外)除以行标识符。
答案 1 :(得分:0)
这不是一个非常有效的解决方案,但可以起作用:
df %>%
mutate(temp = rowSums(select(., grep("t_", names(df), value = TRUE)))) %>%
mutate_at(vars(starts_with("t_")), funs(adjusted = 1/temp*.)) %>%
select(-temp)
id t_1 t_2 t_3 t_4 t_1_adjusted t_2_adjusted t_3_adjusted t_4_adjusted
1 101 0.02822581 0.39919355 0.3185484 0.25403226 0.02822581 0.39919355 0.3185484 0.25403226
2 102 0.60273973 0.06849315 0.0000000 0.32876712 0.60273973 0.06849315 0.0000000 0.32876712
3 103 0.42285714 0.05142857 0.4400000 0.08571429 0.42285714 0.05142857 0.4400000 0.08571429
4 104 0.34934498 0.34061135 0.3100437 0.00000000 0.34934498 0.34061135 0.3100437 0.00000000