r - 为数据框的每个列(变量)创建单独的向量

标签 r for-loop vector dataframe

目标:获取一个数据框并为其每一列(变量)创建单独的向量。

下面的代码让我很接近:

batting <- read.csv("mlb_2014.csv", header = TRUE, sep = ",")
hr <- batting[(batting$HR >= 20 & batting$PA >= 100), ]
var_names <- colnames(hr)
for(i in var_names) {
path <- paste("hr$", i, sep = "")
assign(i, as.vector(path))
}

它为数据框中的每一列创建一个向量,如下面的输出所示:

> ls()
 [1] "AB"          "Age"         "BA"          "batting"     "BB"          "CS"         
 [7] "G"           "GDP"         "H"           "HBP"         "hr"          "HR"         
 [13] "i"           "IBB"         "Lg"          "Name"        "OBP"         "OPS"        
 [19] "OPS."        "PA"          "path"        "Pos.Summary" "R"           "RBI"        
 [25] "SB"          "SF"          "SH"          "SLG"         "SO"          "TB"         
 [31] "Tm"          "var_names"   "X2B"         "X3B"        

到目前为止一直很好,直到您调用其中一个向量。例如:

AB
[1] "hr$AB"

唉,创建的只是一个单元素字符向量。当我想要它创建的是这个...

> AB <- as.vector(hr$AB)
> AB
[1] 459 456 506 417 492 496 404 430 497 346 494 501 415 370 500 331 501 539 456 443 316 437
[23] 449 526 349 486 432 480 295 489 354 506 315 471

...对于原始数据框中的每个变量。

如何让 R 将字符向量“路径”中的元素识别为要在分配函数中调用的对象,而不是将单个字符元素分配给我正在创建的向量?我想将其保留在循环框架工作中,因为该项目背后的主要动机是自学如何使用循环。

谢谢!

最佳答案

为此,我们有 list2env:

list2env(iris, .GlobalEnv)
head(Species)
#[1] setosa setosa setosa setosa setosa setosa
#Levels: setosa versicolor virginica

但是,几乎没有理由像那样污染您的工作空间。

编辑:

下面是如何使用循环执行此操作:

var_names <- colnames(iris)
for(i in var_names) {
  assign(i, iris[[i]])
}

请注意,我使用 [[ 来访问 data.frame 列,而不是创建您的 path。如果您有一个列名称作为字符向量,那么(或 [)就是使用此字符访问该列的方法。

关于r - 为数据框的每个列(变量)创建单独的向量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25750542/

相关文章:

r - 根据列表对列进行排序,然后对数据框中的另一列进行排序

php - 奇怪的 for 循环语法

c++ - 减少STL vector 的容量

c++ - 在C++中的 vector 内向 vector 添加元素

R:通过具有小拼写错误的字符列连接两个数据框

r - 在RStudio中安装软件包时出错:从连接读取错误

r - 如何通过索引在初始化向量中存储不同大小的 for 循环输出

java - 程序永远不会在 ArrayList 中找到某个项目,即使它应该在那里

vector - 如何在 Ada 中添加向量

r - 安装 R 包。包含目录为空。开发 header