我有一個如下所示的資料框:
dat <- data.frame(Target = c(rep("01", times = 8), rep("02", times = 4)),
targ1clicks = c(1, 1, 1, 1, 0, 0 ,0 , 1, 0, 0, 0, 1))
Target targ1clicks
1 01 1
2 01 1
3 01 1
4 01 1
5 01 0
6 01 0
7 01 0
8 01 1
9 02 0
10 02 0
11 02 0
12 02 1
我要查找的是 targ1clicks 列中的值在 1 和 0 之間變化的次數。所以對于 Target 01,它應該是 2;對于目標 02,它應該是 1。我知道有一些類似的帖子幫助我實作了我已經擁有的代碼(如下)。問題是我的代碼沒有生成正確的值,我不知道為什么。
這是我到目前為止的代碼:
clickRows <- which(dat$targ1clicks != dplyr::lag(dat$targ1clicks)) #find the row numbers
#where there is a change
dat2 <- dat[c(clickRows),] #filter by these row numbers and save as new df
dat2 <- dat2 %>%
group_by(Target) %>%
filter(targ1clicks == 1) #filter just on the '1' values
no.accClicks <- as.data.frame(table(dat2$Target)) #This should show the number
#of value changes for each target
問題是,這段代碼沒有給我 Target 01 的正確值——它給了我以下資訊:
Var1 Freq
1 01 1
2 02 1
Freq 列應該指示值更改的數量,因此 01 目標應該有 2,我不知道為什么它不能正常作業!任何關于為什么這不起作用的見解或關于如何編碼的任何替代方法將不勝感激。
uj5u.com熱心網友回復:
你走在正確的軌道上。使用滯后與以前的值進行比較。這將給出一個 TRUE/FALSE 的向量(TRUE 表示值已更改)。然后為每組取這個向量的總和。
library(dplyr)
dat %>%
group_by(Target) %>%
summarise(changes = sum(targ1clicks != lag(targ1clicks), na.rm = TRUE))
uj5u.com熱心網友回復:
嘗試這個
dat |> group_by(Target) |>
summarise(Freq = sum(abs(diff(targ1clicks))))
# A tibble: 2 × 2
Target Freq
<chr> <dbl>
1 01 2
2 02 1
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/494881.html
上一篇:如何在沒有for回圈的情況下逐行比較兩個`pd.Series`es
下一篇:將字典串列加載到資料框中
