如何使用 rbind 和 data.frame 避免重复值?

How to avoid duplicated values uisng rbind and data.frame?

我想合并数据框中的值。

我的玩具示例是这个:

table1 <-c()

a <- data.frame("p.value" = c(0.01, 0.05), "Pos" = c(1, 2))
b <- data.frame("p.value" = 0.005, "Pos" = 1)

table1 <- rbind(table1,data.frame(a, b)) 

这给了我这个输出:

> table1
p.value Pos p.value.1 Pos.1
1    0.01   1     0.005     1
2    0.05   2     0.005     1

但我想要的输出是:

> table1
p.value Pos p.value.1 Pos.1
1    0.01   1     0.005     1
2    0.05   2      NA       NA

你能告诉我如何避免重复值并用 NA 填充吗?

一种方法是使两个数据帧的行数相同,然后 cbind

cbind(a, b[seq_len(nrow(a)), ])

#   p.value Pos p.value Pos
#1     0.01   1   0.005   1
#NA    0.05   2      NA  NA

如果您不是绝对需要其他 Pos 列,您可以使用 tidyverse 中的 left_join

table1 <- rbind(table1, left_join(a, b, by=c("Pos"), suffix = c("", ".1")))

  p.value Pos p.value.1
1    0.01   1     0.005
2    0.05   2        NA

要在不通过 Pos 合并的情况下获得所需的表 1,您可以通过 rownames:

合并
tbl_a <- a %>% mutate(names = rownames(a))
tbl_b <- b %>% mutate(names = rownames(b))

table1 <- tbl_a %>% 
  full_join(tbl_b, by = "names")
table1

如果你想变回data.frame,使用

table1 %>%
  select(-names) %>%
  as.data.frame

这会产生您发布的数据框