R - 将两个数据帧与缺失和乱序的行组合
R - combining two data frames with missing and out of order rows
我有两个数据框
merge_test_1 = t(data.frame("cats" = 1, "dogs" = 2, "horses" = 4))
merge_test_2 = t(data.frame("horses" = 1, "dogs" = 3, "rabbits" = 2))
它们看起来像这样:
[,1]
cats 1
dogs 2
horses 4
[,1]
horses 1
dogs 3
rabbits 2
请注意,它们并非所有行名称都相同,而且它们共享的行名称的顺序也不同。我想将它们组合在一起,以便得到这样的结果:
[,1] [,2]
cats 1 0
dogs 2 3
horses 4 1
rabbits 0 2
最终数据框中的顺序并不重要,只要它们正确组合即可。我尝试使用 "merge" 命令,但我不太明白。
library(dplyr)
merge_test_1 = t(data.frame(cats = 1, dogs = 2, horses = 4)) %>% as.data.frame()
merge_test_2 = t(data.frame(horses = 1, dogs = 3, rabbits = 2)) %>% as.data.frame()
# change row names into actual column
merge_test_1 <- tibble::rownames_to_column(merge_test_1)
merge_test_2 <- tibble::rownames_to_column(merge_test_2)
df <- full_join(merge_test_1, merge_test_2, by = "rowname")
# change NAs to 0
df[is.na(df)] <- 0
df
#> rowname V1.x V1.y
#> 1 cats 1 0
#> 2 dogs 2 3
#> 3 horses 4 1
#> 4 rabbits 0 2
我同意之前关于将行名移动到变量的评论,但如果您不想这样做并且只使用基本 R 函数,则以下代码应该有效(尽管不匹配的单元格将是 NA
而不是 0
)。
merge_test_1 = t(data.frame(cats = 1, dogs = 2, horses = 4))
merge_test_2 = t(data.frame(horses = 1, dogs = 3, rabbits = 2))
merge(merge_test_1, merge_test_2, by = 0, all = TRUE)
#> Row.names V1.x V1.y
#> 1 cats 1 NA
#> 2 dogs 2 3
#> 3 horses 4 1
#> 4 rabbits NA 2
我有两个数据框
merge_test_1 = t(data.frame("cats" = 1, "dogs" = 2, "horses" = 4))
merge_test_2 = t(data.frame("horses" = 1, "dogs" = 3, "rabbits" = 2))
它们看起来像这样:
[,1]
cats 1
dogs 2
horses 4
[,1]
horses 1
dogs 3
rabbits 2
请注意,它们并非所有行名称都相同,而且它们共享的行名称的顺序也不同。我想将它们组合在一起,以便得到这样的结果:
[,1] [,2]
cats 1 0
dogs 2 3
horses 4 1
rabbits 0 2
最终数据框中的顺序并不重要,只要它们正确组合即可。我尝试使用 "merge" 命令,但我不太明白。
library(dplyr)
merge_test_1 = t(data.frame(cats = 1, dogs = 2, horses = 4)) %>% as.data.frame()
merge_test_2 = t(data.frame(horses = 1, dogs = 3, rabbits = 2)) %>% as.data.frame()
# change row names into actual column
merge_test_1 <- tibble::rownames_to_column(merge_test_1)
merge_test_2 <- tibble::rownames_to_column(merge_test_2)
df <- full_join(merge_test_1, merge_test_2, by = "rowname")
# change NAs to 0
df[is.na(df)] <- 0
df
#> rowname V1.x V1.y
#> 1 cats 1 0
#> 2 dogs 2 3
#> 3 horses 4 1
#> 4 rabbits 0 2
我同意之前关于将行名移动到变量的评论,但如果您不想这样做并且只使用基本 R 函数,则以下代码应该有效(尽管不匹配的单元格将是 NA
而不是 0
)。
merge_test_1 = t(data.frame(cats = 1, dogs = 2, horses = 4))
merge_test_2 = t(data.frame(horses = 1, dogs = 3, rabbits = 2))
merge(merge_test_1, merge_test_2, by = 0, all = TRUE)
#> Row.names V1.x V1.y
#> 1 cats 1 NA
#> 2 dogs 2 3
#> 3 horses 4 1
#> 4 rabbits NA 2