gpt4 book ai didi

R 跨行比较列

转载 作者:行者123 更新时间:2023-12-04 11:56:05 26 4
gpt4 key购买 nike

由于我或多或少是 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com