R 跨行比较列

标签 r compare

由于我或多或少是 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。您将需要 CRAN 上的最新 data.table 版本才能使其正常工作。


使用 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

关于R 跨行比较列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33146552/

相关文章:

R:使用数据表聚合数据

r - 将图像保存在ggplot和ggmap中

java - 使用java比较图结构

c# - 通过两个属性比较两个对象

r - 如何在 R 中使用 locfit 绘制 90% 置信带

从每个字符串的末尾删除特定字符

r - 在 ggplot2 中绘制 map 时避免水平线和疯狂的形状

c++ - 告诉 `string::operator==` 从字符串的后面开始比较

java - 比较两个加密密码的情况

python - 比较 2 个列表列表(字符串和数组)