0
我有一個(整齊)數據幀,看起來像這樣:如何在數據框中的行之間執行過濾算術?
!> my_table
# A tibble: 8 × 4
g a b val
<date> <lgl> <lgl> <int>
1 2015-01-01 FALSE FALSE 3175030
2 2015-01-01 FALSE TRUE 72229
3 2015-01-01 TRUE FALSE 125505
4 2015-01-01 TRUE TRUE 856737
5 2015-02-01 FALSE FALSE 3413510
6 2015-02-01 FALSE TRUE 69203
7 2015-02-01 TRUE FALSE 122925
8 2015-02-01 TRUE TRUE 876366
現在我想按......分組g
和基於列a
和b
濾波器行之間執行算術。 例如,我想帶(每個組)的(TRUE,FALSE)
行和(FALSE,TRUE)
行之間的差:
# A tibble: 2 × 2
g diff
<date> <int>
1 2015-01-01 53276
2 2015-02-01 53722
在非/半tidyverse世界,我會執行類似濾波器先上(TRUE,FALSE)
行再加入與在(FALSE,TRUE)
行另一個過濾表,然後採取c
列之間的差異爲每個,像這樣:
diff_table <- inner_join(
filter(my_table, a, !b) %>% select(g, val1 = val),
,filter(my_table, !a, b) %>% select(g, val2 = val)
) %>% transmute(g, diff = val1 - val2)
這只是正常... ,但似乎不雅和我想我可以可以通過使用group_by
來完成這個更簡單的方法。 也就是說然後按g
分組,然後對行/之間的特定值執行算術運算。 任何人都知道這裏更「整齊」和優雅的解決方案?
是和否...適用於此實例,但過濾變量('a'和'b')可能並不總是如此輕易地被視爲邏輯/整數。想象一下,第三個過濾變量是基於可能級別的子集來限定行的因素...... – mmuurr
您想提供一些示例嗎? – JasonWang