首页 文章

使用dplyr / plyr计算行间的百分比?

提问于
浏览
1

我有一个数据帧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

感谢您抽出宝贵的时间 .

1 回答

  • 2

    虽然不是最简洁,但您可以使用 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
    

相关问题