【问题标题】:Calculate Percentage Column for List of Dataframes When Total Value is Hidden Within the Rows当总值隐藏在行中时,计算数据框列表的百分比列
【发布时间】:2018-01-22 19:33:10
【问题描述】:
library(tidyverse)

我觉得有一个简单的解决方案,但我被困住了。下面的代码创建了两个数据帧的简单列表(为了简单起见,它们是相同的,但实际数据具有不同的值)

Loc<-c("Montreal","Toronto","Vancouver","Quebec","Ottawa","Hamilton","Total")
Count<-c("2344","2322","122","45","4544","44","9421")

Data<-data_frame(Loc,Count)
Data2<-data_frame(Loc,Count)
Data3<-list(Data,Data2)

每个数据框的“Loc”列中都有“Total”以及“Count”列的相应总和。我想通过将“计数”列中的每个值除以总数来计算每个数据帧的百分比,总数是“计数”列中的最后一个数字。

我希望将百分比添加为每个数据框的新列。

对于此示例,总计是列中的最后一个数字,但实际上,它可能混合在列中的任何位置,并且可以通过“Loc”列中相应的“Total”值找到。

我想使用 purrr 和 Tidyverse:

下面是代码示例,但我被百分比困住了......

Data3%>%map(~mutate(.x,paste0(round(100*  (MISSING PERCENTAGE),2),"%"))

【问题讨论】:

    标签: r tidyverse


    【解决方案1】:

    此解决方案仅使用 base-R:

    for (i in seq_along(Data3)) {
      Data3[[i]]$Count <- as.numeric(Data3[[i]]$Count)
      n <- nrow(Data3[[i]])
      Data3[[i]]$perc <- Data3[[i]]$Count / Data3[[i]]$Count[n]
    } 
    
    > Data3
    [[1]]
    # A tibble: 7 x 3
            Loc Count        perc
          <chr> <dbl>       <dbl>
    1  Montreal  2344 0.248805859
    2   Toronto  2322 0.246470651
    3 Vancouver   122 0.012949793
    4    Quebec    45 0.004776563
    5    Ottawa  4544 0.482326717
    6  Hamilton    44 0.004670417
    7     Total  9421 1.000000000
    
    [[2]]
    # A tibble: 7 x 3
            Loc Count        perc
          <chr> <dbl>       <dbl>
    1  Montreal  2344 0.248805859
    2   Toronto  2322 0.246470651
    3 Vancouver   122 0.012949793
    4    Quebec    45 0.004776563
    5    Ottawa  4544 0.482326717
    6  Hamilton    44 0.004670417
    7     Total  9421 1.000000000
    

    【讨论】:

    • 谢谢,但您能否提供不使用 for 循环的答案? (应用函数族)。或者更好的是,使用管道 (%>%) 的 Tidyverse 解决方案?我之所以问这个问题,是因为这个问题实际上是一大块代码的一部分,这些代码主要是 Tidyverse 语法,它使用管道,所以突然切换到 for 循环会导致我改变流程。希望你能帮忙?
    • 对 Tidyverse 不太熟悉...如果没有人提供令人满意的答案,也许可以在几天内研究一下
    • 没问题。你能用 lapply (或类似的 apply 函数组)代替 for 循环重写吗?
    • 我接受了您的回答,因为它可以满足我的一般需求。但是我问了另一个关于用 Tidyverse 语法重写它的问题,所以如果你弄明白了,你可以获得另一个学分。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-10
    • 2023-04-01
    • 2017-08-08
    • 2013-12-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多