我的問題上面並不能完全解釋我所面臨的問題。 只是一個聲明 - 我非常非常新的與R,和我在自修(或者說谷歌是教我),所以道歉,如果我的問題是真的很幼稚。 我有一個家庭級別的數據,我將其轉換爲個人級別。它的長和短都是創建了很多新手。數據看起來是這樣的:我需要給的NA一列基於值的值在另一列
我想用相同的代碼戶具有相同的省,區,而不是NA。數據是這樣的,因爲一個家庭中有多個人(顯然)。實際數據比這大得多。
希望得到任何幫助!我可以根據需要提供更多信息。
最佳, 阿斯瑪
我的問題上面並不能完全解釋我所面臨的問題。 只是一個聲明 - 我非常非常新的與R,和我在自修(或者說谷歌是教我),所以道歉,如果我的問題是真的很幼稚。 我有一個家庭級別的數據,我將其轉換爲個人級別。它的長和短都是創建了很多新手。數據看起來是這樣的:我需要給的NA一列基於值的值在另一列
我想用相同的代碼戶具有相同的省,區,而不是NA。數據是這樣的,因爲一個家庭中有多個人(顯然)。實際數據比這大得多。
希望得到任何幫助!我可以根據需要提供更多信息。
最佳, 阿斯瑪
你想要的東西,如:
dataframe$Z <- ifelse(is.na(dataframe$X), dataframe$Y, dataframe$X)
哪裏dataframe
是數據幀中的問題; X
是含有一些NA
值的列; Y
是回退到的列;和Z
是含有聚結的結果
我不認爲這給出了OP正在尋找的答案。儘管問題的標註方式如何,但我認爲他們需要取代「NA」的值來自同一列,而不是另一列 - 而不是來自不同的列。 –
你可以試試這個方法循環列:
# in initialize a new data frame
data2 = NULL
codes = unique(data$hhcode)
for(i in 1:length(codes)){
# subset data by hhcode
data1 = data[data$hhcode == codes[i],]
# as long as you only have one unique region per code
# you can pull out the unique factor and then set all
# region variable for a single code
region = data1$region[is.na(data1$region) == F]
data1$region = region
# do the same for province
province = data1$province[is.na(data1$province) == F]
data1$province = province
#bind data to a new data frame
data2 = rbind(data2,data1)
}
head(data2)
data2[1:30,]
我認爲這個答案也給了OP所尋找的東西。你也可以使用'!is.na()'而不是'is.na()== F'。最後一部分應該是'data2 [1:15,]'或者'data2',以避免打印不必要的'NA's。另外,如果數據集很大,最後的'rbind()'可能會變得很慢。 –
因此,作爲一個rooky你可以使用一個簡單的for循環。稍後更好地使用apply()中的sthg。
步驟1) 創建數據集。 「sdgfsdh」是正確的dput由OP的使用(頭(數據幀,10))會比較好。但爲了方便R-Rooky。 重新創建數據集:
df = data.frame(hhcode = c(rep(101010101, 5), rep(101010102, 5), rep(101010103, 5)),
province = c(rep(c(rep(NA, 4), "punjab"), 2), c(rep(NA, 4), "sindh")),
region = rep(c(rep(NA, 4), "urban"), 3))
2) 更換NA's。
對於每一行我們都要替換第二列和第三列。換句話說:我們想要替換每一列,除了第一列。如果我們在索引前面寫一個負號,我們可以排除列:df [,-1]。 現在我們想用a)行代替NA,這些行沒有爲「region」和「province」獲得NA,但是b)共享相同的hhcode值。
一)我們如何鑑別行,沒有獲得來港?使用na.omit(df)。 b)假設df $ hhcode存儲在一個名爲hhcode的變量中,那麼我們需要df $ hhcode等於hhcode - > df $ hhcode == hcode的行。 (注意哪個()給了我們在df $ hhcode == hcode中的「TRUE」情況的索引
最後,我們想對每個存在的唯一hhcode重複一遍,這句話中的重要詞語是: 「for」和「unique」 在你的數據集中,我可以識別出共享相同「hhcode」的組,我們可以通過df $ hhcode訪問hhcode,要獲得所有唯一的hhcode,我們使用唯一的(df $ hhcode) So我們遍歷每個獨特的元素(df $ hhcode)並替換NAs =)。
for(hhcode in unique(df$hhcode)){
df[which(df$hhcode == hhcode), -1] = na.omit(df)[na.omit(df)$hhcode == hhcode, -1]
}
df
df = data.frame(hhcode = c(rep(101010101, 5), rep(101010102, 5), rep(101010103, 5)),
province = c(rep(c(rep(NA, 4), "punjab"), 2), c(rep(NA, 4), "sindh")),
region = rep(c(rep(NA, 4), "urban"), 3))
首先你生成一個data.frame df_complete123唯一的完整的情況下,由前三列(無NAS)
df_complete123 <- df[!is.na(df$province) & !is.na(df$region),]
它看起來像這樣
hhcode province region
101010101 punjab urban
101010102 punjab urban
101010103 sindh urban
接下來,您將使用它作爲某種查找表。第一
indices <- match(df$hhcode, df_complete123$hhcode)
,這將給你這個
1 1 1 1 1 2 2 2 2 2 3 3 3 3 3
這意味着,第一列(hhcode)的df
條目中找到的1,1,1,1,1,2, 2,...在df_complete123中的第 - 行。
使用此那些df_complete123的替換DF在第二值和第三列:
df$province <- df_complete123$province[indices]
df$region <- df_complete123$region[indices]
這導致
hhcode province region
1 101010101 punjab urban
2 101010101 punjab urban
3 101010101 punjab urban
4 101010101 punjab urban
5 101010101 punjab urban
6 101010102 punjab urban
7 101010102 punjab urban
8 101010102 punjab urban
9 101010102 punjab urban
10 101010102 punjab urban
11 101010103 sindh urban
12 101010103 sindh urban
13 101010103 sindh urban
14 101010103 sindh urban
15 101010103 sindh urban
祝您好運!
這也適用 - 謝謝!這有額外的好處,我可以使用它的數據集與額外的列,他們將保持不變(這是我想要的)。 – usmoi
您應該在問題中添加數據本身而不是快照。運行'head(dataframe_object,10)'並在這裏複製輸出。 –
還是更好呢:'dput(head(dataframe,10))' – sdgfsdh
在我看來,這個問題是錯誤標記的。 NAs需要被每列中的數據替換,而不是來自另一列,對嗎? –