由于我或多或少是R的初学者,因此我面临以下挑战。
我有一个类似的data.frame这样:
a b c
1 x g1 date1
2 x g1 date2
3 y g2 date3
4 y g3 date4
5 y g4 date5
6 z g1 date6
7 z g2 date7
8 x g4 date8
9 y g1 date9
10 y g3 date10
我想做的是将列a
中的第一个值与第二个值进行比较。如果它们相同,则在b列中检查是否g2
遵循g1
。
该数据是按日期排序,我基本上要找到出现的次数,其中g2
如下g1
而列对应的数值a
是相似的。
在上面的示例数据中,总和为1。(第6行和第7行)
有一种更简单的方法,但这是我的data.table
尝试
library(data.table) ## v 1.9.6+
setDT(df)[a == shift(a, type = "lead") & b == "g1" & shift(b, type = "lead") == "g2", .N]
## [1] 1
这基本上是a
与平移a
列进行比较,同时检查b
列是否等于g1
以及平移b
列是否等于g2
。您需要data.table
CRAN上的最新版本才能正常工作。
dplyr
在这些行中使用它可能会有所帮助
library(dplyr)
df %>%
filter(a == lead(a) & b == "g1" & lead(b) == "g2") %>%
count()
# Source: local data table [1 x 1]
#
# n
# (int)
# 1 1
或与基数R
sum(with(df, a == c(tail(as.character(a), -1), NA) & b == "g1" & c(tail(as.character(b), -1), NA) == "g2"))
## [1] 1
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句