将两个向量合并到一个数据框中并保留其向量名称的功能

时间:2019-03-06 19:19:30

标签: r

我有两个向量

randomName1 = c(4,5,6,3,2,1)
randomName2 = c(3,4,5,6,7,4)

可以使用此简单功能轻松合并为数据框

fun = function(x, y) {
    df = data.frame(x, y)
   df
}

fun(randomName1,randomName2)
  x y
1 4 3
2 5 4
3 6 5
4 3 6
5 2 7
6 1 4

但矢量已丢失其名称。您可以在函数中再添加两个参数,并执行以下操作:

fun = function(x, y, name1, name2) {
   df = data.frame(x, y)
   colnames(df) = c(name1, name2)
   df
}

fun(randomName1, randomName2, "randomName1", "randomName2")
  randomName1 randomName2
1           4           3
2           5           4
3           6           5
4           3           6
5           2           7
6           1           4

但是在这种情况下,我们需要额外的参数,不能仅仅直接传递向量。有没有一种简单的方法可以将向量的名称保留为数据帧的列名称,而无需添加更多函数参数?

1 个答案:

答案 0 :(得分:2)

问题是,当您使用参数xy将两个向量传递到函数中时,它们在函数范围内被重命名为x和{{1} }。因此,当您将它们放入带有y的数据框中时,它们的新名称将保留在data.frame(x,y)中。

为防止这种情况,您需要使用原始名称传递它们,您可以使用colnames

...

f <- function(...) { df <- data.frame(...) return(df) } f(randomName1, randomName2) randomName1 randomName2 1 4 3 2 5 4 3 6 5 4 3 6 5 2 7 6 1 4 参数获取未分配给命名参数的所有参数,并使它们在函数中可用。由于我们没有将...randomName1分配给参数,因此它们会以其原始名称传递到randomName2中,而这些名称将保存在data.frame