R数据表条件和:更干净的方式

R数据表条件和:更干净的方式,r,data.table,R,Data.table,这当然是一个经常遇到的问题,所以我希望这里有很多关于这方面的问题。然而,我能找到的所有答案都非常具体,并且经常遇到变通方法(您不必这样做,foobar在这种情况下更好)或非data.table解决方案。也许这是因为data.table应该是一个不需要动脑筋的工具 我有一个data.table,其中包含tentgelt和teu-med的年度数据。对于每一年,我想知道tentgelt>te_-med的观测值份额。这就是我正在做的: # note that nAbove and nBelow do n

这当然是一个经常遇到的问题,所以我希望这里有很多关于这方面的问题。然而,我能找到的所有答案都非常具体,并且经常遇到变通方法(您不必这样做,foobar在这种情况下更好)或非data.table解决方案。也许这是因为data.table应该是一个不需要动脑筋的工具

我有一个data.table,其中包含
tentgelt
teu-med
的年度数据。对于每一年,我想知道
tentgelt>te_-med
的观测值份额。这就是我正在做的:

# note that nAbove and nBelow do not add up to 1
nAbove <- wages[tentgelt > te_med, list(nAbove = .N), by=list(year)]
nBelow <- wages[tentgelt < te_med, list(nBelow = .N), by=list(year)]
nBelow[nAbove][, list(year, foo=nAbove/(nAbove+nBelow))]
以下是我的数据示例:

   year tentgelt    te_med
 1: 2010   120.95  53.64929
 2: 2010     9.99 116.72601
 3: 2010   113.52  53.07394
 4: 2010    10.27  38.45728
 5: 2010    48.58 124.65753
 6: 2010    96.38  86.99060
 7: 2010     3.46  65.75342
 8: 2010   107.52  91.87592
 9: 2010   107.52  42.92953
10: 2010     3.46  73.92328
11: 2010    96.38  85.23419
12: 2010     2.25  79.19995
13: 2010    42.32  35.75757
14: 2010     7.94  93.44305
15: 2010   120.95 113.41370
16: 2010     7.94 110.68628
17: 2010   107.52 127.30682
18: 2010     2.25 103.49036
19: 2010   120.95 123.62054
20: 2010    96.38  68.57532
对于此示例,预期输出应为:

   year   V2
1: 2010 0.45
试试这个

wages[, list(foo= sum(tentgelt > te_med)/.N), by = year]
#    year  foo
# 1: 2010 0.45

我想他说这两个加起来不等于1,所以你需要除以
(tentgelt>te_-med)/((tentgelt>te_-med)+(tentgelt@JasonOPs代码不起作用。即使它能起作用,他们也不会使用它达到预期的输出,因为
9/11!=0.45
,而Yevgeny做了
9/20=0.45
,这是预期的输出。无论哪种方式,为了模仿OPs原始代码,人们都可以按=年做
工资[,(foo={temp te(temp)}]
一个跟进:在样本数据中,
te\u-med
没有丢失。如果
te\u-med
允许为
NAN
,我是否必须将
na.rm=TRUE
放入所有3个总和中?您的选项是正确的,但如果您想要
.N
答案工作,您需要添加
!is.na(te\med)
作为data.table的一个条件,开头的段落应该放在注释中,而不是问题中……不管怎样,这就是我要说的。这就是所谓的“噪音”
wages[, list(foo= sum(tentgelt > te_med)/.N), by = year]
#    year  foo
# 1: 2010 0.45