這張表是我所擁有的那張表的簡化版本。現在我對每個用戶都有多個觀察結果,我想包括特定的觀察結果。我要應用的規則是,如果特定用戶的觀察只是一個觀察,則包括這一觀察,否則,僅包括第二個觀察(按每個會話播放的時間排序)。
| 姓名 | 用戶身份 | session_id |
|---|---|---|
| e_1 | 111 | 101 |
| e_1 | 111 | 102 |
| e_1 | 111 | 103 |
| e_2 | 112 | 104 |
| e_2 | 112 | 105 |
| e_3 | 113 | 106 |
| e_3 | 113 | 107 |
| e_4 | 114 | 108 |
| e_5 | 115 | 109 |
所以,我想達到這個輸出
| 姓名 | 用戶身份 | session_id |
|---|---|---|
| e_1 | 111 | 102 |
| e_2 | 112 | 105 |
| e_3 | 113 | 107 |
| e_4 | 114 | 108 |
| e_5 | 115 | 109 |
我嘗試運行多個使用 dplyr 的代碼,并使用 if_else。我使用函式 count() 來查找每個名稱的觀察次數,然后嘗試進行相應的過濾
這是我的嘗試
new_table<-
old_table %>%
group_by(name) %>%
arrange(name) %>%
if_else(count(name) %>% filter(n==1), filter (row_number()==1), filter (row_number()==2))
但是它不起作用。請指導我為正確的代碼調整它。
uj5u.com熱心網友回復:
一個tidyverse選項:
library(tidyverse)
tribble(
~name, ~user_id, ~session_id,
"e_1", 111, 101,
"e_1", 111, 102,
"e_1", 111, 103,
"e_2", 112, 104,
"e_2", 112, 105,
"e_3", 113, 106,
"e_3", 113, 107,
"e_4", 114, 108,
"e_5", 115, 109
) |>
group_by(user_id) |>
filter(row_number() <= 2) |>
slice_tail(n = 1)
#> # A tibble: 5 × 3
#> # Groups: user_id [5]
#> name user_id session_id
#> <chr> <dbl> <dbl>
#> 1 e_1 111 102
#> 2 e_2 112 105
#> 3 e_3 113 107
#> 4 e_4 114 108
#> 5 e_5 115 109
由reprex 包于 2022-06-06 創建(v2.0.1)
uj5u.com熱心網友回復:
這不是最有效的,但應該給你一個解決方案。
輸入資料:
> df
name user_id session_id
1 e_1 111 101
2 e_1 111 102
3 e_1 111 103
4 e_2 112 104
5 e_2 112 105
6 e_3 113 106
7 e_3 113 107
8 e_4 114 108
9 e_5 115 109
接著:
rnam.df <- c()
for (n in unique(df$name)){
new_df <- subset(df,df$name==n) # subset df by names
ifelse(nrow(new_df)>1,Value <- 2, Value <- 1) # you only want first or second row whith same name
rnam.df <- append(rnam.df,row.names(new_df[Value, ])) # append row names which contains the values found
}
出去:
> rnam.df
[1] "2" "5" "7" "8" "9"
> df[rnam.df, ]
name user_id session_id
2 e_1 111 102
5 e_2 112 105
7 e_3 113 107
8 e_4 114 108
9 e_5 115 109
編輯
第三列應該不是問題,因為我沒有使用。在您進行編輯之前,我從以前的帖子中獲得了價值!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/487577.html
上一篇:RobotFramework:SeleniumLibrary(Eclipse)-如何使用Run關鍵字if
下一篇:如何在資料集中添加出現次數的列?
