我有一個按id和排序的資料框year,多年來觀察了 n 次。每個人每年的觀察次數是不規則的。我將資料中的一個“洞”定義為一個觀察結果,其中x2=1和上面??的觀察結果,對于相同的id(不一定是相同的year),等于 0。例如,個人 A 在 2002 年有一個洞。當這種情況發生時,我需要創建一個變數,用于存盤x1上面的值,為此x2=0. 在個人 A 的示例中,我需要新變數在 時等于 5 x2=1。
x1 = c(5,3,2,2,5,7,7,3,4,8)
x2 = c(0,1,0,1,0,1,0,1,0,1)
id = c("A","A","A","B","B","C","C","C","D","D")
year = c(2001,2002,2003,2001,2002,2001,2001,2002,2001,2002)
df = data.frame(year,id,x1,x2)
考慮到這個示例資料框,我需要新變數如下所示:
outcome = c(.,5,.,.,.,.,.,7,.,4)
我正在使用的資料集有近 10.000.000 個觀察值,針對 3.000.000 個人超過 4 年,所以我無法手動執行此操作。是否有任何通用的方法來實作這一點,適用于任何資料集,無論維度如何?
我在這里瀏覽了一些使用 for 回圈迭代組的帖子(一個例子是Iterating a for loop over groups in a dataset),但我無法應用其中的任何一個。在 Stata 14 中失敗后,我一直在嘗試在 R 中執行此操作。我找不到任何適用于有序組的帖子,這正是我正在尋找的。
uj5u.com熱心網友回復:
這是讓您outcome使用dplyr.
library(dplyr)
df %>%
group_by(id) %>%
mutate(
outcome = ifelse(x2 == 1 & lag(x2) == 0, lag(x1), NA)
)
結果
# A tibble: 10 × 5
# Groups: id [4]
year id x1 x2 outcome
<dbl> <chr> <dbl> <dbl> <dbl>
1 2001 A 5 0 NA
2 2002 A 3 1 5
3 2003 A 2 0 NA
4 2001 B 2 1 NA
5 2002 B 5 0 NA
6 2001 C 7 1 NA
7 2001 C 7 0 NA
8 2002 C 3 1 7
9 2001 D 4 0 NA
10 2002 D 8 1 4
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/534903.html
標籤:r数据库数据框
上一篇:將資料框從垂直轉換為水平
