簡體   English   中英

根據 R 中的兩列填充一列

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM