R 从数据框中的每列创建变量

R 从数据框中的每列创建变量,r,variables,for-loop,R,Variables,For Loop,我有一个数据框,其中包含我想单独查看的列。我不确定像这样单独分析数据的常用方法是什么,但我想为原始数据框中的每一列创建一个单独的变量/数据框。我知道我可以使用子集,但是有没有一种方法可以使用for循环(这是最简单的方法吗?)从数据框中的x列创建x个新变量 关于我的数据框架的更多细节,我有一个产品和一个相应的索引(产品是根据它来判断的) 示例数据帧: Date Product 1 Index 1 Product 2 Index 2 1/1/1995

我有一个数据框,其中包含我想单独查看的列。我不确定像这样单独分析数据的常用方法是什么,但我想为原始数据框中的每一列创建一个单独的变量/数据框。我知道我可以使用子集,但是有没有一种方法可以使用for循环(这是最简单的方法吗?)从数据框中的x列创建x个新变量

关于我的数据框架的更多细节,我有一个产品和一个相应的索引(产品是根据它来判断的)

示例数据帧:

Date         Product 1     Index 1     Product 2     Index 2
1/1/1995        2.89        2.75         4.91         5.01
2/1/1995        1.38        1.65         3.47         3.29

因此,我想为每个产品和相应的索引创建一个变量,而无需手动为每个产品创建数据框,也无需在分析产品时进行子集设置。

如评论中所述,您可以通过索引来实现这一点。但是,如果您确实希望数据帧中的每一列都有单独的向量,您可以这样做:

df <- data.frame(x=1:10, y=11:20, z=21:30)

for (i in colnames(df)) {
    assign(i, df[, i])
}

df您可以为列编制索引,并将它们放入一个新列表中,每个元素都包含产品/索引对和日期列

ind <- seq(2, by = 2, length.out = ncol(dat[-1])/2)
(sets <- lapply(ind, function(i) dat[c(1, i:(i+1))]))
# [[1]]
#       Date Product1 Index1
# 1 1/1/1995     2.89   2.75
# 2 2/1/1995     1.38   1.65
# 
# [[2]]
#       Date Product2 Index2
# 1 1/1/1995     4.91   5.01
# 2 2/1/1995     3.47   3.29
数据:

dat <- 
structure(list(Date = structure(1:2, .Label = c("1/1/1995", "2/1/1995"
), class = "factor"), Product1 = c(2.89, 1.38), Index1 = c(2.75, 
1.65), Product2 = c(4.91, 3.47), Index2 = c(5.01, 3.29)), .Names = c("Date", 
"Product1", "Index1", "Product2", "Index2"), class = "data.frame", row.names = c(NA, 
-2L))

dat这就是
attach
所做的。您只需执行
附加(我的数据\u框架)


大多数知道自己在做什么的人都会告诉你,这介于“不必要”和“不是个好主意”之间。

我不明白你为什么要这么做。可以使用索引,如
d$Date
d$`Product 1`
等,也可以使用
attach
(我不建议这样做)。
list2env(data.GlobalEnv)
可能就是您想要的。它将列作为自己的变量发送到全局环境。@user2662565如果可以将变量名对存储在列表中,则可以执行:
indx
dat <- 
structure(list(Date = structure(1:2, .Label = c("1/1/1995", "2/1/1995"
), class = "factor"), Product1 = c(2.89, 1.38), Index1 = c(2.75, 
1.65), Product2 = c(4.91, 3.47), Index2 = c(5.01, 3.29)), .Names = c("Date", 
"Product1", "Index1", "Product2", "Index2"), class = "data.frame", row.names = c(NA, 
-2L))