gpt4 book ai didi

r - 将数字列从计数转换为比例的整洁方法

转载 作者:行者123 更新时间:2023-12-04 11:49:23 24 4
gpt4 key购买 nike

我只想将下面数据框中的数字行转换为行比例。

df <- data.frame(
"id" = c("A", "B", "C", "D"),
"x" = c(1, 2, 3, 4),
"y" = c(2, 4, 6, 8)
)
所以 df$x[1] <- 应该转换为 .3333 并且 df$y[1] 应该是 .6666 等等。我想用整洁的代码动态地做到这一点,而不是按名称引用任何列,并忽略数据框中的任何非数字列。
我目前的尝试,基于阅读了一些类似的帖子,如下
df %>%
mutate_if(is.numeric, . / rowSums(across(where(is.numeric))))
这将返回以下错误: Error: across() must only be used inside dplyr verbs. 请帮忙!

最佳答案

改写如下:

df %>%
mutate_if(is.numeric, ~ . / rowSums(select(df, where(is.numeric))))
输出:
  id         x         y
1 A 0.3333333 0.6666667
2 B 0.3333333 0.6666667
3 C 0.3333333 0.6666667
4 D 0.3333333 0.6666667
编辑:如果你想要一个除了 dplyr 和 base 之外不使用任何其他包的答案,并且可以更容易地通过管道传输,这是另一个(hacky)解决方案:
df %>%
group_by(id) %>%
mutate(sum = as.character(rowSums(select(cur_data(), is.numeric)))) %>%
summarise_if(is.numeric, ~ . / as.numeric(sum))
在函数中引用当前数据的常用 dplyr 方式(例如 cur_data )似乎不能很好地与 rowSums 配合使用。在我原来的措辞中,所以我在这里采取了稍微不同的方法。不过,可能有更好的方法来做到这一点,所以我愿意接受建议。

关于r - 将数字列从计数转换为比例的整洁方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68410408/

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