我想生成一个具有给定相关性的两列数据帧。两列分别命名为“ 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()
接受一个向量来命名列,因此我不必求助于此。
答案 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
。