如何估算后续行中缺失的观察结果?

How to impute missing observations in subsequent rows?

我在重新编码时遇到困难(在 R 或 SPSS 中填充空单元格)

我正在处理一个长格式数据集(为了 运行 一个多层次模型),其中每个受访者(ID 变量)有三行,因此每行下面的相同 ID 号的三倍其他(三个不同的时刻)。

问题在于,对于第二个变量(受访者的祖先),只有第一行有一个值,但每个受访者的第二行都缺少该(相同)值 (0/1)。任何人都可以帮忙吗?我只习惯于在同一行内重新编码……在数据格式下方。

ID      Ancestry    
1003    1
1003    .
1003    .
1004    0
1004    .
1004    .
1005    1
1005    .
1005    .

我们可以使用 na.locf 假设 . 意味着 NA 值。

 library(zoo)
 df1$Ancestry <- na.locf(df1$Ancestry)

如果该列是非数字的,即具有 . 作为值,那么我们需要将其转换为数字,以便 . 强制转换为 NA 然后我们应用 na.locf在上面

 df1$Ancestry <- na.locf(as.numeric(df1$Ancestry))
 df1$Ancestry
 #[1] 1 1 1 0 0 0 1 1 1

如果需要分组"ID"

 library(data.table)
 setDT(df1)[, Ancestry := na.locf(Ancestry), by = ID]

在 SPSS 中,这应该可以完成工作,假设 "Ancestry" 变量是数字:

AGGREGATE /OUTFILE=* MODE=ADDVARIABLES OVERWRITEVARS=YES/BREAK=ID /Ancestry=MAX(Ancestry).

如果"Ancestry"是一个字符串,你可以这样做:

sort cases by ID Ancestry (d).
if ID=lag(ID) and Ancestry="" Ancestry=lag(Ancestry).
execute.

另一种实现此目的的简单方法是 R 以下,使用实际值始终出现在每个 ID 的第一个位置这一事实:

library(dplyr)
df %>% group_by(ID) %>% mutate(Ancestry = Ancestry[1])

Source: local data frame [9 x 2]
Groups: ID [3]

     ID Ancestry
  (int)    (chr)
1  1003        1
2  1003        1
3  1003        1
4  1004        0
5  1004        0
6  1004        0
7  1005        1
8  1005        1
9  1005        1

如果您更喜欢 base 解决方案,我认为我可能会做以下事情,尽管有很多方法可以实现相同的目的:首先,请注意,如果 df 是您的数据框,然后

 df$Ancestry <- as.numeric(df$Ancestry)

会将 . 强制转换为 NA。然后我们可以使用

df_id <- df[complete.cases(df),]
df$Ancestry <- NULL
df <- merge(df, df_id, all.x = T)

给出相同的输出。在这里,我取一个仅包含完整条目的 dataframe,然后 merge 将其返回到原始 dataframe

一旦您通过自己喜欢的方法将 . 转换为 NA,这正是 tidyr::fill 的设计目的:

library(tidyr)

df %>% extract(Ancestry, 'Ancestry', convert = TRUE) %>% fill(Ancestry)
# 
#     ID Ancestry
# 1 1003        1
# 2 1003        1
# 3 1003        1
# 4 1004        0
# 5 1004        0
# 6 1004        0
# 7 1005        1
# 8 1005        1
# 9 1005        1
IF (ID EQ LAG(ID)) Ancestry=LAG(Ancestry).

或者:

IF (ID EQ LAG(ID) AND MISSING(Ancestry)) Ancestry=LAG(Ancestry).