Mar*_*ijn 2 r count subset data.table
我想计算一个数组的子集组中的项数大于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
Run Code Online (Sandbox Code Playgroud)
我可以使用以下代码添加给定年份中男性/女性人数的计数:
setDT(MyData)[, Count:=.N, by='year,type']
Run Code Online (Sandbox Code Playgroud)
但我不知道如何包括这样一个事实,即我只想计算重量大于给定年份基准的男性/女性人数.有没有办法使用这个基准值的参考?当您想要计算大于固定数字(例如大于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
Run Code Online (Sandbox Code Playgroud)
另一个选项(可能更快一点)是按条件选择事件然后 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
Run Code Online (Sandbox Code Playgroud)
或者类似的
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
Run Code Online (Sandbox Code Playgroud)
无论哪种方式,如果你坚持将结果恢复到你的原始数据集,一个快速的方法是加入(但这不会产生NAs),类似(使用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"]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
991 次 |
| 最近记录: |