我的数据框如下所示:
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
答案 0 :(得分:0)
阅读您的数据:
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
答案 1 :(得分:0)
library(tidyverse)
df %>%
pmap_dfr(~{ x <- list(...)
if(any(is.na(x))) intersect(x, df[1,]) # match with first row's values to assign names
else x})
输出:
# # A tibble: 6 x 3
# x y z
# <int> <int> <int>
# 1 1 2 3
# 2 1 2 3
# 3 1 2 3
# 4 NA 2 3
# 5 1 2 3
# 6 1 NA 3
答案 2 :(得分:0)
另一种解决方案,其主要思想是根据不具备NA的行捕获数据集的模式,然后使用您捕获的模式执行某些整形。
def sayManyTimes(a: String): IO[String] = IO(a * 3)
(1 to 2).foldLeft("Read this: ")((c, i) =>
c + sayManyTimes("mayo").unsafeRunSync)