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

4
在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

在生成的数据框中,是否有一种优雅的方法可以将原始变量名保留为列名?通过“优雅”,我的意思是比显式重命名列更简单的方法。


我可以问一下你是否在现实生活中想要“合并”两个变量与这种情况相匹配吗?因为针对这种用例,我建议使用expand.grid - TARehman
4个回答

8
我们可以将其转换为数据框并使用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

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

如果您想避免名称的双重引用,请使用expand.grid(mget(c("a","b"))) - thelatemail

3
您可以在 data.table 包中使用 CJ
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))

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接