[英]Populating one column based on two columns in R
我有以下數據集,並且正在嘗試創建更有意義的路徑。
排# | 會議 | 點擊 | 頁 |
---|---|---|---|
1 | 123 | 進入 | pg1 |
2 | 123 | 按鈕 | pg1 |
3 | 123 | 進入 | PG2 |
4 | 123 | 進入 | PG3 |
5 | 123 | 表格1 | PG3 |
6 | 123 | 表格2 | PG3 |
7 | 123 | 表格1 | PG3 |
8 | 123 | 表格1 | PG3 |
9 | 123 | 按鈕 | PG3 |
10 | 123 | 進入 | pg1 |
11 | 123 | xyz選擇 | pg1 |
12 | 123 | 進入 | pg4 |
13 | 123 | 進入 | PG3 |
14 | 123 | 后退 | PG3 |
15 | 123 | 進入 | pg1 |
我希望結果看起來像這樣:
會議 | 活動 |
---|---|
123 | pg1 |
123 | 按鈕 |
123 | PG2 |
123 | PG3 |
123 | 表格1 |
123 | 表格2 |
123 | 表格1 |
123 | 按鈕 |
123 | pg1 |
123 | xyz選擇 |
123 | pg4 |
123 | PG3 |
123 | 后退 |
123 | pg1 |
如果 Click 列有 Enter,則 Activity 列應該顯示 Page。 但是,如果后續頁面與上一頁相同,則 Activity 列應顯示 Click 列中的值。 例如,第 1 行和第 2 行具有相同的頁碼,因此我希望 Activity 列顯示 Pg1,然后顯示 phpbutton。 但是,如果 Click 列有兩個或多個后續相同的值,如第 7 行和第 8 行所示,我希望 Activity 列僅顯示 Form 1 的一個條目。
非常感謝。
library(dplyr)
dat$activity <- ifelse(dat$click == "Enter" & (lag(dat$page) != dat$page | is.na(lag(dat$page))), dat$page,
ifelse(lag(dat$page) == dat$page, dat$click, NA))
row session click page activity
1 1 123 Enter Pg1 Pg1
2 2 123 phpbutton Pg1 phpbutton
3 3 123 Enter Pg2 Pg2
4 4 123 Enter Pg3 Pg3
5 5 123 Form1 Pg3 Form1
6 6 123 Form2 Pg3 Form2
7 7 123 Form1 Pg3 Form1
8 8 123 Form1 Pg3 Form1
9 9 123 abcbutton Pg3 abcbutton
10 10 123 Enter Pg1 Pg1
11 11 123 xyzselect Pg1 xyzselect
12 12 123 Enter Pg4 Pg4
13 13 123 Enter Pg3 Pg3
14 14 123 Back Pg3 Back
15 15 123 Enter Pg1 Pg1
您可以像這樣刪除重復的連續行:
dat[cumsum(rle(paste0(dat$session, dat$click, dat$page, dat$activity))$length),]
row session click page activity
1 1 123 Enter Pg1 Pg1
2 2 123 phpbutton Pg1 phpbutton
3 3 123 Enter Pg2 Pg2
4 4 123 Enter Pg3 Pg3
5 5 123 Form1 Pg3 Form1
6 6 123 Form2 Pg3 Form2
8 8 123 Form1 Pg3 Form1
9 9 123 abcbutton Pg3 abcbutton
10 10 123 Enter Pg1 Pg1
11 11 123 xyzselect Pg1 xyzselect
12 12 123 Enter Pg4 Pg4
13 13 123 Enter Pg3 Pg3
14 14 123 Back Pg3 Back
15 15 123 Enter Pg1 Pg1
數據:
structure(list(row = 1:15, session = c(123L, 123L, 123L, 123L,
123L, 123L, 123L, 123L, 123L, 123L, 123L, 123L, 123L, 123L, 123L
), click = c("Enter", "phpbutton", "Enter", "Enter", "Form1",
"Form2", "Form1", "Form1", "abcbutton", "Enter", "xyzselect",
"Enter", "Enter", "Back", "Enter"), page = c("Pg1", "Pg1", "Pg2",
"Pg3", "Pg3", "Pg3", "Pg3", "Pg3", "Pg3", "Pg1", "Pg1", "Pg4",
"Pg3", "Pg3", "Pg1")), row.names = c(NA, -15L), class = "data.frame")
嘗試這個
df |> group_by(Session) |>
mutate(Activity = case_when(Click == "Enter" ~ Page ,
lag(Page) == Page ~ Click)) |> select(Session , Activity)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.