gpt4 book ai didi

r - 如何计算数组的子组中大于该数组中特定值的项数?

转载 作者:行者123 更新时间:2023-12-04 09:10:51 25 4
gpt4 key购买 nike

我想计算一个数组的子组中大于 R 中该数组中特定值的项目数。请参见下面的示例,每年都有一个外部基准是给定的一部分数据(这不是数据集的平均值)。对于给出一年基准的每一行,我想添加一列,其中包含体重大于基准的男性数量;和一列体重大于基准的女性人数。

> MyData
year type weight DesiredOutput1 DesiredOutput2
1 1990 Female 78 NA NA
2 1990 Male 74 NA NA
3 1990 Female 80 NA NA
4 1990 Male 90 NA NA
5 1990 Male 94 NA NA
6 1990 Male 70 NA NA
7 1990 Female 65 NA NA
8 1990 Female 61 NA NA
9 1990 benchmark 78 4 1
10 1990 Female 71 NA NA
11 1990 Male 91 NA NA
12 1990 Female 70 NA NA
13 1990 Male 81 NA NA
14 1991 Male 71 NA NA
15 1991 benchmark 79 1 2
16 1991 Female 80 NA NA
17 1991 Female 81 NA NA
18 1991 Male 70 NA NA
19 1991 Male 80 NA NA
20 1991 Female 65 NA NA
21 1992 Female 79 NA NA
22 1992 benchmark 80 3 1
23 1992 Male 81 NA NA
24 1992 Male 82 NA NA
25 1992 Male 86 NA NA
26 1992 Male 80 NA NA
27 1992 Female 81 NA NA

我可以使用以下代码计算给定年份的男性/女性人数:

setDT(MyData)[, Count:=.N, by='year,type']

但我不知道如何包含这样一个事实,即我只想计算体重大于给定年份基准的男性/女性人数。有没有办法使用这个基准值的引用?当您想计算大于固定数字(例如大于 70)的值的数量时,我已经看到了几种解决方案,但是您如何与数组中的值进行比较?

最佳答案

我认为您不需要所有这些 NA。如果你只需要计数,你可以简单地按条件表,这是一个例子

setDT(MyData)[, as.list(table(factor(type[weight > weight[type == 'benchmark']]))), 
by = year]
# year Female Male
# 1: 1990 1 4
# 2: 1991 2 1
# 3: 1992 1 3

另一种选择(可能快一点)是按条件选择事件,然后 dcast

dcast(setDT(MyData)[, type[weight > weight[type == 'benchmark']], by = year], 
year ~ V1, length)
# year Female Male
# 1: 1990 1 4
# 2: 1991 2 1
# 3: 1992 1 3

或者类似的

setDT(MyData)[, type[weight > weight[type == 'benchmark']], by = year
][, table(year, factor(V1))]
# year Female Male
# 1990 1 4
# 1991 2 1
# 1992 1 3

无论哪种方式,如果您坚持将结果返回到您的原始数据集中,一个快速的方法是加入(但这不会产生 NA),比如(使用v 1.9.6+)

res <- dcast(setDT(MyData)[, type[weight > weight[type == 'benchmark']], by = year],
year ~ V1, length)
MyData[res, c("Female", "Male") := .(i.Female, i.Male), on = "year"]

关于r - 如何计算数组的子组中大于该数组中特定值的项数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33473932/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com