【问题标题】:Calculating Percentages in R with NA's in same Column?用同一列中的NA计算R中的百分比?
【发布时间】:2018-04-26 12:46:18
【问题描述】:

我有下面的数据框,其中包含一个 NA 值,我想创建一个名为 Percentages 的新列所以 df$percentages,以便它作为值列中每个数字的百分比除以总数

        Country Information Value percentage
1      UK        Cars    50       0.50
2      UK       Sheep    20       0.20
3      UK        Cats    15       0.15
4      UK        Dogs    10       0.10
5      UK       Shoes     5       0.05
6      UK        Hats     NA       NA (or 0 or NULL)
7   Total               100       1.00

关于如何创建该百分比列的任何想法?

我尝试了所有不同的方法,但没有解决方案!

感谢任何帮助!

【问题讨论】:

  • df$percentage <- df$value/sum(df$value, na.rm = T)
  • 不完全,仍然得到不是百分比的大值 - 有什么想法吗?
  • 你的数据集中有负值吗?因为如果值为正数,sum(df$value) 应该始终高于或等于 df$value 的任何值。
  • 值是数据框中的值,没有负值,但我得到的值例如数字 50 为 0.25?哪个是正确的?
  • 那是因为您在总和中计算“总计”,所以您将 50 除以 50+20+15+10+5+100 = 200 而不是 100。我提供了通用解决方案。从数据集中排除最后一行。

标签: r dataframe statistics percentage


【解决方案1】:

根据 cmets 中所说的,我会给你一个扩展的解决方案(我的类似于 @Terru_theTerror)。

  • 定义定义总数的范围,或者假设最后一行是总数,或者每一行的总和除了最后一行给出总数。
  • 用你的值除以这个总数。

用 R 翻译,就是这样。

total <- df$Value[nrow(df)] # or total <- sum(df$Value[1:(nrow(df)-1)], na.rm = T)
df$percentage <- df$Value/total

【讨论】:

    【解决方案2】:

    试试这个解决方案:

        df$percentage<-c(df[1:nrow(df)-1,"Value"]/sum(df[1:nrow(df)-1,"Value"],na.rm = T),1)
    df
      Country Value percentage
    1      UK    50       0.50
    2      UK    20       0.20
    3      UK    15       0.15
    4      UK    10       0.10
    5      UK     5       0.05
    6      UK    NA         NA
    7   Total   100       1.00
    

    我的意见:

        df<-data.frame(Country=c("UK","UK","UK","UK","UK","UK","Total"),Value=c(50,20,15,10,5,NA,100))
    

    注意:使用 cmets 中的信息进行更新

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-21
      • 2022-06-23
      • 1970-01-01
      • 2015-01-02
      • 2022-01-14
      • 1970-01-01
      相关资源
      最近更新 更多