R 为每个数据帧创建单独的向量';s列(变量)

R 为每个数据帧创建单独的向量';s列(变量),r,for-loop,vector,dataframe,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$",

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

下面的代码让我很接近:

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))
}
到目前为止一切都很好,直到你调用其中一个向量。例如:

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
>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”中的元素作为要在赋值函数中调用的对象,而不是要分配给我正在创建的向量的单个字符元素?我想把它保持在循环框架内,因为这个项目背后的主要动机是教我自己如何使用循环


谢谢

我们有
列表2env
用于此:

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]])
}

var_name正如@Roland提到的,你通常不想这么做。从长远来看,如果您将事物放在列表、环境或数据框中,生活会更轻松

更好的方法是学习如何将
一起使用,
中的
以及相关函数。这些将临时将列表、环境或数据框附加到搜索路径的开头,以便您可以直接按名称引用元素/列:

> with(iris, head( Sepal.Width/Petal.Length ) )
[1] 2.500000 2.142857 2.461538 2.066667 2.571429 2.294118

这些功能在不污染全球环境或搜索路径的情况下为您提供了便利。

欢迎使用StackOverflow!我可以帮你。作为将来的参考,最好使用一个内置的、易于复制的数据集来提问,而不是引用.csv之类的文件。不用担心。理想答案是(1)帮助你理解如何使用循环,还是(2)回答你关于如何从字符向量到向量的问题?你能解释一下为什么要这样做吗?这在R中是一件不寻常的事情。如果你想在交互模式下保存一些输入,那么你可以使用
attach()
来做这件事-但是请注意,一些R程序员不赞成这样做。Hi Hack-R:我会记得在将来使用内置数据集。很抱歉嗨,安德里:我知道这很不寻常。老实说,我只是在玩R,并试图找到与for循环相关的东西。这似乎是应该服从这种方法的事情,我有点沮丧,因为我不能让它工作。所以我想这比实际更迂腐。啊,是的!我根本没有想到在赋值函数中使用子集。非常优雅。非常感谢。
> with(iris, head( Sepal.Width/Petal.Length ) )
[1] 2.500000 2.142857 2.461538 2.066667 2.571429 2.294118