当总值隐藏在行中时计算数据框列表的百分比列

Calculate Percentage Column for List of Dataframes When Total Value is Hidden Within the Rows

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" 列。我想通过将 "Count" 列中的每个值除以总数来计算每个数据帧的百分比,总数是 "Count" 列中的最后一个数字。

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

对于这个例子,总数是列中的最后一个数字,但实际上,它可能在列中的任何位置混合,可以通过[=26=中对应的"Total"值找到] 柱子。

我想使用 purrr 和 Tidyverse:

下面是代码示例,但我坚持使用百分比...

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

此解决方案仅使用 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