r - 使用 dplyr/plyr 计算跨行的百分比?

标签 r dplyr tidyverse

我有一个数据框x,像这样。

set.seed(1)
x <- data.frame(id = letters[1:3], c1 =runif(3,max=3), c2 = runif(3,max=2), c3 = runif(3,max=4))

# id        c1        c2        c3
# 1  a 0.3271498 1.8415800 0.3496333
# 2  b 1.4744138 1.3157962 1.9983840
# 3  c 2.6475328 0.8444028 3.9316721

我希望能够使用 dplyr 或另一个 tidyverse 包计算每一行的百分比。有任何想法吗?

例如,x 的输出为:

# id        c1        c2        c3
# 1  a 0.1299057 0.7312607 0.1388336
# 2  b 0.3079012 0.2747772 0.4173217
# 3  c 0.356637 0.1137456 0.5296174

感谢您抽出时间。

最佳答案

虽然不是最简洁,但您可以使用 tidyrdplyr 来完成此操作。

set.seed(10)
x <- data.frame(id = letters[1:3], c1 =runif(3,max=3), c2 = runif(3,max=2), c3 = runif(3,max=4))

x %>% 
  gather(variable, value, -id) %>% 
  group_by(id) %>% 
  mutate(percentage = value/sum(value)) %>% 
  select(-value) %>% 
  spread(variable, percentage)

Source: local data frame [3 x 4]
Groups: id [3]

      id        c1         c2         c3
* <fctr>     <dbl>      <dbl>      <dbl>
1      a 0.4329613 0.16112458 0.40591407
2      b 0.4502457 0.25160471 0.29814957
3      c 0.9019967 0.08077433 0.01722901

关于r - 使用 dplyr/plyr 计算跨行的百分比?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41969569/

相关文章:

r - 使用 %>% 动态指定因子水平

r - 根据 id 序列扩展列

r - R 中使用 PBSmapping 包的 importShapefile 出错

r - 如何在 golem 框架 Shiny 包中测试模块?

R dplyr : Non-Standard Evaluation difficulty. 想在过滤器和变异中使用动态变量名

r - 使用前一行的结果以特定的数字顺序进行变异

r - ggplot 中的次要点没有填充

r - 如何通过将第一行除以第三行来创建行

r - 通过R中的不同列值求和

r - 如何通过将现有行的值与 R dplyr 组合来将行添加到数据帧