![](/img/trans.png)
[英]Replacing outliers from multiple columns in a dataframe containing NAs using R
[英]comparing multiple columns including NAs in a dataframe R
我有一個數據框,包括 1,2 和一堆 NA
我想比較這些列並將結果保存在新列中(假設為 F),以便:如果在每一行中所有值都是 1,那么如果所有值都是 2,那么新列為同一行獲得 1,然后分配 2對於新列中的同一行,如果數字不同(1 和 2 的組合),則在新列中分配新數字,如 3
你知道怎么可能這樣做嗎?
嘗試這個。 如果方差為 0,則新列等於平均值。 如果不是,則新列等於唯一值的總和 (2,2,4=6)。 如果一行中只有一個非 NA 值,則方差將不起作用,因此第一個“if”語句會處理該問題。
df <- as.data.frame(matrix(c(1, 1, 1, NA, NA, NA, 2, 2, NA, NA, NA, NA, 3, 2, 1, 2,
NA, NA, 4, 2, NA, 2, NA, NA, 5, 1, NA, NA, NA, NA),
ncol=5, byrow=T))
colnames(df) <- c("A", "B", "C", "D", "F")
for (i in 1:nrow(df)) {
if (length(as.numeric(df[i, 1:5])[!is.na(as.numeric(df[i, 1:5]))]) == 1) {
df[i, "col3"] <- as.numeric(df[i, 1:5])[!is.na(as.numeric(df[i, 1:5]))]
}
else if (var(as.numeric(df[i, 1:5]), na.rm=T)==0) {
df[i, "col3"] <- mean(as.numeric(df[i, 1:5]), na.rm=T)
}
else if (var(as.numeric(df[i, 1:5]), na.rm=T)!=0) {
df[i, "col3"] <- sum(unique(as.numeric(df[i, 1:5])), na.rm=T)
}
}
df
*更新為適用於兩列以上。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.