2016-05-08 7 views
3

私はいくつかのレコーディング(RまたはSPSSの空のセルを埋める)に問題があります次の行で欠落している観測を補間する方法は?

私は長いフォーマットのデータセット(マルチレベルモデルを実行するために)変数)は3つの行を持つので、3つの同じID番号が互いに下にあります(3つの異なるmomemtsの間)。

問題は、2番目の変数(回答者の祖先)は最初の行だけに値がありますが、2番目の行はそれぞれの回答者が2番目の行に(同じ)値(0/1)を逃しています。誰も助けることができますか?私は同じ行の中で...データフォーマットの下で記録することに慣れています。

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

答えて

4

我々は.NA値を意味することを想定しna.locfを使用することができます。

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

列が非数値つまり値として.を持っている場合は、私たちはNAに.強制するように数値に変換する必要がありますし、我々がもし

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

それに na.locfを適用それはSPSS、これは「祖先」を想定し、仕事をする必要があります

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

「ID」によってグループ化される必要があり、変数は数値です。

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

「祖先」が文字列の場合、あなたはこの道を行くことができます:

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

実際の値が常にで発生しているという事実を利用して、これはRである以下を達成するためのもう一つの簡単な方法各IDの最初の位置:あなたがbaseソリューションを好む場合

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 

が、私は同じことを達成するための多くの方法がありますが、以下は、何であるか私はおそらく行っていると思います:第一に、もしことに注意してください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に戻します。

1

あなたが好きな方法でNA. Sを変換したら、これは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 
1
IF (ID EQ LAG(ID)) Ancestry=LAG(Ancestry). 

または代わり:

IF (ID EQ LAG(ID) AND MISSING(Ancestry)) Ancestry=LAG(Ancestry). 
関連する問題