我想合并数据框中的值。
我的玩具示例就是这个例子:
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?
答案 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
这与您发布的数据框架完全相同