如何使用 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
这会产生您发布的数据框
我想合并数据框中的值。
我的玩具示例是这个:
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
这会产生您发布的数据框