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

时间:2019-08-20 14:56:37

标签: r dataframe rbind

我想合并数据框中的值。

我的玩具示例就是这个例子:

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?

3 个答案:

答案 0 :(得分:2)

一种方法可能是使两个数据帧具有相同的行数,然后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

答案 1 :(得分:2)

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

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

答案 2 :(得分:2)

要获得所需的表1而不通过Pos进行合并,可以通过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

这与您发布的数据框架完全相同