假设我有以下数据框:
foo <- data.frame(a=letters,b=seq(1,26),
n1=rnorm(26),n2=rnorm(26),
u1=runif(26),u2=runif(26))
我想将列u1
和u2
附加到列n1
和n2
。现在,我发现了以下方式:
df1 <- foo[,c("a","b","n1","n2")]
df2 <- foo[,c("a","b","u1","u2")]
names(df2) <- names(df1)
bar <- rbind(df1,df2)
这就是诀窍。但是,它似乎有点牵扯。我太挑剔了吗?或者在R中有更快/更简单的方法吗?
答案 0 :(得分:3)
以下是使用full_join()
中的dplyr
的一种方式:
library(dplyr)
full_join(df1, df2, by = c("a", "b", "n1" = "u1", "n2" = "u2"))
来自文档:
full_join
返回x和y中的所有行和所有列。哪里 没有匹配的值,为缺少的值返回NA。
要加入的变量的字符向量。如果为NULL,则默认为 join将使用具有通用名称的所有变量进行自然连接 两张桌子对面。一条消息列出了变量,以便您可以 检查他们是对的。
要通过x和y上的不同变量连接,请使用命名向量。对于 例如,by = c(“a”=“b”)将x.a与y.b匹配。
答案 1 :(得分:2)
使用Map()
连接列,并使用cbind()
进行回收以获得最终数据框。
cbind(foo[1:2], Map(c, foo[3:4], foo[5:6]))
如果需要,用列名替换数字索引。
cbind(foo[c("a", "b")], Map(c, foo[c("n1", "n2")], foo[c("u1", "u2")]))
答案 2 :(得分:1)
短手:
<form>
<input type="text"
pattern="\d{10}"
maxlength="10"
placeholder="Input 10 digits"
title="Input 10 digits" />
<input type="submit">
</form>
冗长:
rbind(foo[1:4], setNames(foo[c(1, 2, 5, 6)], names(foo[1:4])))
啰嗦(更干):
rbind(foo[c("a", "b", "n1", "n2")], setNames(foo[c("a", "b", "u1", "u2")], c("a", "b", "n1", "n2")))