我有一个大量填充缺失值的数据集。我试图通过找到两列的最大值来使它们中的一些消失。所以我的数据集是这样的:
df1 <- data.frame(id = 1:20, col1 = runif(20)*100, col2 = runif(20)*100)
df1[c(1,3,7,12,18),'col1'] <- NA
df1[c(2,4,7,14,18),'col2'] <- NA
> head(df1,10)
id col1 col2
1 1 NA 71.073951
2 2 20.51551 NA
3 3 NA 14.308692
4 4 82.31036 NA
5 5 15.89198 44.190152
6 6 82.72071 20.761311
7 7 NA NA
8 8 87.80027 8.615998
9 9 26.98488 90.835827
10 10 14.61701 5.184187
经过多次试验和错误,我发现找到max
2 列并处理 的唯一方法NA's
是嵌套ifelse
语句:
df1$col3 <- NA
df1$col3 <- ifelse(is.na(df1$col1) & is.na(df1$col2), NA, ifelse(!is.na(df1$col1) & is.na(df1$col2), df1$col1
,ifelse(is.na(df1$col1) & !is.na(df1$col2), df1$col2
,ifelse(!is.na(df1$col1) & !is.na(df1$col2), apply(df1[,c('col1','col2')],1,max), df1$col3)))
)
这使:
> df1
id col1 col2 col3
1 1 NA 71.073951 71.07395
2 2 20.51551 NA 20.51551
3 3 NA 14.308692 14.30869
4 4 82.31036 NA 82.31036
5 5 15.89198 44.190152 44.19015
6 6 82.72071 20.761311 82.72071
7 7 NA NA NA
8 8 87.80027 8.615998 87.80027
9 9 26.98488 90.835827 90.83583
10 10 14.61701 5.184187 14.61701
这些似乎过于复杂。有没有人有更好的解决方案?