我有两个这样的excel文件,我导入为数据框
x title1 title2 x title3
1 x y 1 j
2 a b 2 m
3 i j 3 y
4 m n
我想将这些数据框融合成一个这样的数据框
1 title1 x
2 title1 a
3 title1 i
4 title1 m
1 title2 y
2 title2 b
3 title2 j
4 title2 n
1 title3 j
2 title3 m
3 title3 y
我应该使用ggplot绘制最终数据框的图,我知道如何使用ggplot但我有点困惑如何将两个不相等的数据框融合为一个 我感谢任何帮助
答案 0 :(得分:1)
这里有一种方法。
library(reshape2)
library(dplyr)
id <- 1:4
t1 <- c("x","a","i","m")
t2 <- c("y", "b", "j", "n")
foo <- data.frame(id, t1, t2, stringsAsFactors = FALSE)
id <- 1:3
t3 <- c("j","m","y")
foo2 <- data.frame(id, t3, stringsAsFactors = FALSE)
foo %>%
merge(., foo2, by = "id", all = TRUE) %>%
melt(., id.vars = "id") %>%
filter(!value %in% NA)
id variable value
1 1 t1 x
2 2 t1 a
3 3 t1 i
4 4 t1 m
5 1 t2 y
6 2 t2 b
7 3 t2 j
8 4 t2 n
9 1 t3 j
10 2 t3 m
11 3 t3 y
答案 1 :(得分:1)
将data.frame
放入list
并融化它们。使用@ jazzurro的示例数据,尝试:
melt(list(foo, foo2), id.vars = "id")
# id variable value L1
# 1 1 t1 x 1
# 2 2 t1 a 1
# 3 3 t1 i 1
# 4 4 t1 m 1
# 5 1 t2 y 1
# 6 2 t2 b 1
# 7 3 t2 j 1
# 8 4 t2 n 1
# 9 1 t3 j 2
# 10 2 t3 m 2
# 11 3 t3 y 2
更酷,因为它为您提供了另一列中的原始data.frame
名称,就是将mget
与ls
结合使用上述方法:
melt(mget(ls(pattern = "foo")), id.vars = "id")
# id variable value L1
# 1 1 t1 x foo
# 2 2 t1 a foo
# 3 3 t1 i foo
# 4 4 t1 m foo
# 5 1 t2 y foo
# 6 2 t2 b foo
# 7 3 t2 j foo
# 8 4 t2 n foo
# 9 1 t3 j foo2
# 10 2 t3 m foo2
# 11 3 t3 y foo2