在R中合并两个向量a和b:
a <- c(100,250)
b <- c(0,100,200)
foo <- merge(a,b,all=TRUE)
当我检查 foo 时,我看到合并函数已将两列x和y命名为:
> foo
x y
1 100 0
2 250 0
3 100 100
4 250 100
5 100 200
6 250 200
是否有一种优雅的方法可以将原始变量名称保留为结果数据框中的列名?优雅&#34;我的意思是比explicitly renaming the columns更简单。
答案 0 :(得分:8)
我们可以转换为data.frame和merge
merge(as.data.frame(a), as.data.frame(b), all = TRUE)
# a b
#1 100 0
#2 250 0
#3 100 100
#4 250 100
#5 100 200
#6 250 200
答案 1 :(得分:8)
您还可以将expand.grid()
用于特定用例。
expand.grid(a = a,b = b)
a b
1 100 0
2 250 0
3 100 100
4 250 100
5 100 200
6 250 200
答案 2 :(得分:3)
您还可以在CJ
包
data.table
library(data.table)
CJ(a=a,b=b)
a b
1: 100 0
2: 100 100
3: 100 200
4: 250 0
5: 250 100
6: 250 200
请注意,这会返回一个data.table,它与data.frame类似,但有一些不同的行为。如果您需要data.frame,可以使用:
data.frame(CJ(a=a,b=b))
答案 3 :(得分:1)
如果你喜欢复杂的生活,这是另一种选择:
cross.join <- function(a, b) {
idx <- expand.grid(seq(length=length(a)), seq(length=length(b)))
df <- data.frame(a[idx[,1]], b[idx[,2]])
colnames(df) <- c(deparse(substitute(a)), deparse(substitute(b)))
return(df)
}
a <- c(100,250)
b <- c(0,100,200)
cross.join(a,b)
a b
1 100 0
2 250 0
3 100 100
4 250 100
5 100 200
6 250 200