我有兩個資料框。df1在我感興趣的列中有一些 NA,并且df2在同一列中有我需要的值。我想根據行名在 df1 中填充這些值(df2 中的行名在 df1 中找到)。
例如,df1 將是這樣的:
Age Gender
Patient_1 NA Male # Has NA
Patient_3 30 Male
Patient_66 45 Female
Patient_10 NA Female # Has NA
Patient_11 67 Female
Patient_23 NA Male # Has NA
和 df2 包含相同的資訊,但僅適用于 df1 的年齡列中具有NA的樣本:
Age Gender
Patient_1 59 Male
Patient_10 80 Female
Patient_23 21 Male
現在如何為每個樣本填充從 df2 到 df1 的年齡值?
我試過這個:
for(i in 1:length(df1$Age)){
if(rownames(df1)[i] == rownames(df2)[i]){
df1$Age[[i]] = df2$Age[[i]]
}
}
這不起作用,因為出于某種原因它只填充了值的一個子集,一些值在 df1 中仍然是 NA。
uj5u.com熱心網友回復:
由于df2包含 中所有 NA 行的資料,您可以使用 的行名df1簡單地索引所有 NA 行,然后用該列覆寫它們的值。df1df2Agedf2$Age
df1[rownames(df2), "Age"] <- df2$Age
uj5u.com熱心網友回復:
dplyr和tibble包對此有很好的功能。首先轉換為tibblewith tibble::rownames_to_column()。然后使用dplyr::rows_patch()將 NA 值替換為相應的值patient_id。
library(dplyr)
library(tibble)
df1 |>
rownames_to_column("patient_id") |>
rows_patch(
rownames_to_column(df2, "patient_id")
)
# Matching, by = "patient_id"
# patient_id Age Gender
# 1 Patient_1 59 Male
# 2 Patient_3 30 Male
# 3 Patient_66 45 Female
# 4 Patient_10 80 Female
# 5 Patient_11 67 Female
# 6 Patient_23 21 Male
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/534801.html
標籤:r数据框呐缺失数据
