r - 将数据框列中的某些值移动到 R 中的下一列
问题描述
我有一个如下所示的数据框:
x y z
1 2 3
1 2 3
1 2 3
2 3
1 2 3
1 3
我想问一下R中是否有一个命令可以获取以下数据帧(通过移动和对齐相似的值)
x y z
1 2 3
1 2 3
1 2 3
NA 2 3
1 2 3
1 NA 3
解决方案
读取您的数据:
df<- fread("x y z
1 2 3
1 2 3
1 2 3
2 3 NA
1 2 3
1 3 NA") %>% setDF
代码:
library(magrittr)
getmode <- function(v) {
uniqv <- unique(v)
uniqv[which.max(tabulate(match(v, uniqv)))]
}
pattern <- sapply(df,getmode)
df[!complete.cases(df),] %<>% apply(1,function(x){tmp<-pattern;tmp[!(tmp%in%x)] <- NA;return(tmp)}) %>% t %>% data.frame
结果:
> df
x y z
1 1 2 3
2 1 2 3
3 1 2 3
4 NA 2 3
5 1 2 3
6 1 NA 3