目标:获取一个数据框,并为其每个列(变量)创建单独的向量。
以下代码使我接近:
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"
las,创建的所有内容都是一个元素的字符向量。当我想要创建它时...
> 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将字符向量“ path”中的元素识别为要在assign函数中调用的对象,而不是将单个字符元素分配给要创建的向量?我想将其保留在循环框架中,因为该项目的主要动机是教会我自己如何使用循环。
谢谢!
我们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]])
}
注意,path
我不是创建您的s而是[[
访问data.frame列。如果您将列名用作字符向量,则可以使用(或[
)使用此字符来访问列。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句