首页 > 解决方案 > 将数据框列中的某些值移动到 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

标签: rdataframe

解决方案


读取您的数据:

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

推荐阅读