R 来自 data.frame 的计数百分比

标签 r percentage

我需要计算变量计数的百分比并将其放入向量中

我有一个框架如下:

group <- c('A','A','A','B','B','B')
hight <- c('tall','tall','short','tall','short','short')

group    hight
A        tall
A        tall
A        short
B        tall
B        short
B        short

如果我得到一个运行表(df):

     hight
group short tall
A     1    2
B     2    1

计算百分比

t=table(df)
percentages <- data.frame(group=c('A','B'), percent = c(t[1]/(t[1]+t[2]),t[3]/(t[3]+t[4])))
percentages
percent.vector <- c(t[1]/(t[1]+t[2]),t[3]/(t[3]+t[4]))
percent.vector

我得到了我想要的:

    group   percent
1     A 0.3333333
2     B 0.6666667

[1] 0.3333333 0.6666667

...但我想有更好的方法可以做到这一点。我无法为更大范围的组进行此计算。

如何简化百分比的计算?

谢谢

最佳答案

如果我们使用dplyr/tidyr,得到期望的方式是

library(dplyr)
library(tidyr)
df %>%
    count(group, hight) %>% 
    mutate(percent = n/sum(n)) %>% 
    select(-n) %>% 
    spread(hight, percent)
#     group     short      tall
#    <fctr>     <dbl>     <dbl>
#1      A 0.3333333 0.6666667
#2      B 0.6666667 0.3333333

或者正如@JoeRoe 在评论中提到的那样,我们可以在较新版本的 tidyr 中使用 pivot_wider 来替代 spread

 ...
 pivot_wider(names_from = hight, values_from = percent)

数据

df <- data.frame(group, hight)

关于R 来自 data.frame 的计数百分比,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39758340/

相关文章:

c++ - 如何从包 (RCpp) 内的 R 脚本调用 C++ 函数?

R:查找顶部、中间和底部值以在 dplyr 中创建类别列

R 示例函数发出超过 1000 万个值

r - 有没有办法将 dplyr 的 `do` 函数传递给附加参数的向量?

javascript - 在js中计算百分比

r - 当多个变量的条件相同时简化 case_when()

html - 将背景图像以其原始宽度和高度的 50% 居中

javascript - 比较持续时间并返回匹配百分比

mysql - 基于 >1 列获取列的百分比

javascript - 计算每个元素的百分比