我正在使用 R 作業室,主要是 dplyr 處理,在那里我有一個 df 用戶(A、B、C、...)以及自從他們第一次訪問以來他們處于活躍狀態的哪一天(1、2、3、...)
| 用戶 | 日 | 積極的 |
|---|---|---|
| 一種 | 1 | 噸 |
| 一種 | 3 | 噸 |
| 乙 | 2 | 噸 |
| 乙 | 4 | 噸 |
我想用所有缺失的日子來完成這個串列 - 直到它們當前的最大值(所以對于用戶 B 直到 4 并且對于用戶 A 直到 3) - 并且值為 FALSE:
| 用戶 | 日 | 積極的 |
|---|---|---|
| 一種 | 1 | 噸 |
| 一種 | 2 | F |
| 一種 | 3 | 噸 |
| 乙 | 1 | F |
| 乙 | 2 | 噸 |
| 乙 | 3 | F |
| 乙 | 4 | 噸 |
我已經在谷歌上搜索和咀嚼這個幾個小時了。有人有想法嗎?
uj5u.com熱心網友回復:
我們可以按 'user' 分組,然后從minto max'day' 中獲取序列complete以擴展資料,同時fill使用 'active' 列FALSE(默認情況下,缺少的組合用 填充NA)
library(dplyr)
library(tidyr)
df1 %>%
group_by(user) %>%
complete(day = min(day):max(day), fill = list(active = FALSE)) %>%
ungroup
-輸出
# A tibble: 6 × 3
user day active
<chr> <int> <lgl>
1 A 1 TRUE
2 A 2 FALSE
3 A 3 TRUE
4 B 2 TRUE
5 B 3 FALSE
6 B 4 TRUE
資料
df1 <- structure(list(user = c("A", "A", "B", "B"), day = c(1L, 3L,
2L, 4L), active = c(TRUE, TRUE, TRUE, TRUE)), class = "data.frame",
row.names = c(NA,
-4L))
uj5u.com熱心網友回復:
您可以為所有用戶和所有日期創建一個新的用戶和日期資料框,然后將其加入現有資料框,然后設定活動列。像這樣的東西:
fullDf <- data.frame("user" = c(rep("A", 4), rep("B", 4)),
"day" = rep(1:4, 2))
existingDf <- left_join(fullDf, existingDf, by = c("user", "day"))
existingDf$active <- ifelse(is.na(existingDf$active), FALSE, existingDf$active
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/434725.html
