【问题标题】:How to calculate the percentages of 1 variable using other variable in R如何使用 R 中的其他变量计算 1 个变量的百分比
【发布时间】:2016-03-01 19:37:41
【问题描述】:

我有一个如下所示的数据集,我想按状态计算频率百分比。

数据

#    State     Ideology Freq
#1    CO Conservative   33
#2    CO  Independent   17
#3    CO      Liberal   50
#4    DC Conservative   33
#5    DC  Independent   33
#6    DC      Liberal   33

预期输出:

 #    State     Ideology Freq percentage
 #1    CO Conservative   33   33%
 #2    CO  Independent   17   17%
 #3    CO      Liberal   50   50%
 #4    DC Conservative   33   33.33%
 #5    DC  Independent   33   33.33%
 #6    DC      Liberal   33   33.33%

试过了:

data$percentage = data$Freq/sum(data$Freq)  
percent <- function(x, digits = 2, format = "f", ...) {  
 paste0(formatC(100 * x, format = format, digits = digits, ...), "%")  
}  
data$percentage = percent(data$percentage)

我可以按整体水平计算百分比,但我想按频率值/总和(状态的频率值)计算百分比。

【问题讨论】:

  • 您的Freq 列已经是这里的百分比,不是吗?只是paste0(df$Freq, "%") 已经为您提供了您的专栏...

标签: r


【解决方案1】:

您可以使用dplyr 包:

library(dplyr)
data <- group_by(data, State) %>%
        mutate(percentage = paste0(round(Freq/sum(Freq) * 100, 2), "%"))
data
## Source: local data frame [6 x 4]
## Groups: State [2]
## 
##    State     Ideology  Freq percentage
##   (fctr)       (fctr) (int)      (chr)
## 1     CO Conservative    33        33%
## 2     CO  Independent    17        17%
## 3     CO      Liberal    50        50%
## 4     DC Conservative    33     33.33%
## 5     DC  Independent    33     33.33%
## 6     DC      Liberal    33     33.33%

第一行按State 对数据进行分组。以下mutate() 中的所有操作都针对每个组进行评估。因此,sum(Freq) 将每个状态的 Freq 的值相加。

【讨论】:

    【解决方案2】:
    library(dplyr)
    groups <- group_by(data, State)
    summary <- summarize( SUM.OF.STATE = sum(State ,na.rm = TRUE))
    DF.YOU.WANT <- merge(data, summary, by.x = "State", by.y = "State")
    # and now just divide columnt with freq by columnn from summary df with sum of freq.data is your data frame.
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-01-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-15
      • 1970-01-01
      • 2019-11-05
      相关资源
      最近更新 更多