使用as.data.frame转换矩阵时无法分配名称

时间:2019-03-07 00:29:52

标签: r

我想生成一个具有给定相关性的两列数据帧。两列分别命名为“ x”和“ y”。有很多方法可以做到这一点,从多元正态分布中抽样就是一种。因此,对于50行相关性r = 0.95,这可行:

myFrame <- as.data.frame(mvrnorm(10, mu = c(0,0), Sigma = matrix(c(1,0.56,0.56,1),, ncol = 2), empirical = TRUE))
myFrame

...但是您会注意到列名是V1和V2。我已经阅读了我认为与文档相关的内容,但无法更改名称。

我尝试在不同的地方使用col.names = c("x", "y")。似乎会在最后两个封闭的括号之间,但是我尝试了其他地方。即使我认为它不正确,我也尝试了names = c("x, y"),但无济于事。

我知道我可以使用第二步来更改名称,但是由于as.data.frame()接受一个向量来命名列,因此我不必求助于此。

1 个答案:

答案 0 :(得分:1)

正如注释中所指出的,data.frame()的{​​{1}}和matrix方法都没有参数可用于设置列名。

正如您所说,标准方法是在第二行代码中设置对象的名称。如果您对此感到厌恶,仍然可以在一行中完成它。这是两个选项:

as.data.frame

查看myFrame1 = as.data.frame("colnames<-"(mvrnorm(10, mu = c(0,0), Sigma = matrix(c(1, 0.56, 0.56, 1), ncol = 2), empirical = TRUE), c("x", "y"))) myFrame2 = setNames(as.data.frame(mvrnorm(10, mu = c(0,0), Sigma = matrix(c(1, 0.56, 0.56, 1), ncol = 2), empirical = TRUE)), c("x", "y")) # I would prefer using two lines, much clearer: myFrame3 = as.data.frame(mvrnorm(10, mu = c(0,0), Sigma = matrix(c(1, 0.56, 0.56, 1), ncol = 2), empirical = TRUE)) names(myFrame3) = c("x", "y") # Or, if you're a fine of pipes: library(magrittr) myFrame4 = mvrnorm( 10, mu = c(0,0), Sigma = matrix(c(1, 0.56, 0.56, 1), ncol = 2), empirical = TRUE ) %>% as.data.frame %>% setNames(c("x", "y")) 时,这些方法描述如下:

?as.data.frame

请注意,## S3 method for class 'character' as.data.frame(x, ..., stringsAsFactors = default.stringsAsFactors()) ## S3 method for class 'list' as.data.frame(x, row.names = NULL, optional = FALSE, ..., cut.names = FALSE, col.names = names(x), fix.empty.names = TRUE, stringsAsFactors = default.stringsAsFactors()) ## S3 method for class 'matrix' as.data.frame(x, row.names = NULL, optional = FALSE, make.names = TRUE, ..., stringsAsFactors = default.stringsAsFactors()) 方法没有没有matrix参数。仅col.names方法可以。因此,在将list转换为list时,可以使用data.frame,但不能转换col.names