【发布时间】:2018-03-09 10:35:21
【问题描述】:
这是一个示例代码:
a <- c(1,2,3,4,5)
b <- c(3,4,5)
a_df <- as.data.frame(a)
b_df <- as.data.frame(b)
colnames(a_df) <- "Original"
colnames(b_df) <- "New"
total <- merge(x=a_df, y=b_df, by=0, all=TRUE)
当我运行总计时,这就是我得到的:
Row.names Original New
1 1 1 3
2 2 2 4
3 3 3 5
4 4 4 NA
5 5 5 NA
怎么能让total变成这样?
Row.names Original New
1 1 1 NA
2 2 2 NA
3 3 3 3
4 4 4 4
5 5 5 5
第二个例子:
A <- c('c','d','f','k','j')
B <- c('d','k','j')
A_df <- as.data.frame(A)
B_df <- as.data.frame(B)
colnames(A_df) <- "Original"
colnames(B_df) <- "New"
total <- merge(x=A_df, y=B_df, by=0, all=TRUE)
结果:
Row.names Original New
1 1 c d
2 2 d k
3 3 f j
4 4 k <NA>
5 5 j <NA>
我正在寻找的是:
Row.names Original New
1 1 c <NA>
2 2 d d
3 3 f <NA>
4 4 k k
5 5 j j
提前致谢!
【问题讨论】:
-
得到的输出是正确的。
b_df中的元素3具有行名'1',作为其第一个元素。与a_df中的元素1匹配。b_df中的“缺失”条目是 row.names4和5。 -
谢谢!但是我怎样才能获得一个新的输出,其中 Original 和 New 中的“3”都在同一行?同样,所有“4”都在同一行?请记住,Original 和 New 可能包含字符数据,在这种情况下,所有“c”都应该在同一行,所有“j”都应该在同一行,等等......任何想法都值得赞赏!
-
您可以按列匹配,即
match(a_df, b_df, by.x='Original', by.y='New', all.x=TRUE)。但我不知道你在同一行上所有的'c',所有的'j'是什么意思。请相应更新您的问题。 -
运行 'match(a_df, b_df, by.x='Original', by.y='New', all.x=TRUE)' 结果: Original 1 2 3 4 5 --这不是我要找的。我已经更新了问题以包含更多示例。谢谢!
-
您可以在合并调用之前执行
row.names(B_df) <- match(B_df[[1]], A_df[[1]]),但我认为通常不鼓励以这种方式使用行名...