在R中,合并并使用矢量名称作为列名

时间:2016-06-16 17:59:06

标签: r vector

在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更简单。

4 个答案:

答案 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