如何根据R中的一些标准对这些数据进行排序

w46czmvw  于 2023-01-03  发布在  其他
关注(0)|答案(3)|浏览(153)

以下是我的数据样本:

M<-read.table (text=" group    value   blue
    B   12  Y
    C   14  Y
    A   12  Y
    B   12  N
    C   10  Y
    A   7   Y
    B   6   Y

", header=TRUE)

我想有一个总和为每个组的基础上的值group_by(组)或使用聚合。如果是"Y",那么我根据每组对它们求和。2比如A,两个都是Y,所以A = 19。3现在我可以计算p,即19/19 * 100。4这是我得到的结果。

group  value   P
    A   19  100
    B   30  60
    C   24  100
ylamdve6

ylamdve61#

您可以:

library(tidyverse)

M %>%
  group_by(group) %>%
  summarize(P = 100 * sum(value[blue == "Y"])/sum(value),
            value = sum(value)) %>%
  select(1, 3, 2)
#> # A tibble: 3 x 3
#>   group value     P
#>   <chr> <int> <dbl>
#> 1 A        19   100
#> 2 B        30    60
#> 3 C        24   100

创建于2023年1月1日,使用reprex v2.0.2

mspsb9vt

mspsb9vt2#

dplyr解决方案:

library(dplyr)

M %>%
  count(group, blue, wt = value) %>%
  group_by(group) %>%
  summarise(N = sum(n), P = n[blue == 'Y'] / N * 100)

# A tibble: 3 × 3
  group     N     P
  <chr> <int> <dbl>
1 A        19   100
2 B        30    60
3 C        24   100
blmhpbnm

blmhpbnm3#

'data.table'解,假设value中没有NA。如果不是这样,则将na.rm = TRUE添加到求和函数中

library(data.table)
setDT(M)[, .(value = sum(value), P = 100 * sum(value[blue == "Y"]) / sum(value) ), keyby = .(group)]
#    group value   P
# 1:     A    19 100
# 2:     B    30  60
# 3:     C    24 100

相关问题