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

时间:2014-10-03 13:32:23

标签: r variables for-loop

我有一个数据框,其中包含我想单独查看的列。我不确定像这样单独分析数据的常用方法是什么,但我想为原始数据框中的每一列创建一个单独的变量/数据框。我知道我可以进行子集化,但有没有一种方法可以使用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

所以我想为每个产品和相应的索引创建一个变量,而不是为每个产品创建一个数据框,或者当我想分析产品时进行子集化。

3 个答案:

答案 0 :(得分:1)

与评论中提到的人一样,您可以通过编制索引来完成此操作。但是,如果您确实需要数据框中每列的单独向量,则可以这样做:

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

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

答案 1 :(得分:1)

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

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

如果需要,您可以使用list2env

将这些数据框分配到全局环境
list2env(setNames(sets, paste0("Set", seq_along(sets))), .GlobalEnv)
Set1
#       Date Product1 Index1
# 1 1/1/1995     2.89   2.75
# 2 2/1/1995     1.38   1.65
Set2
#       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))

答案 2 :(得分:0)

这是attach的作用。你可以attach(my_data_frame)

大多数知道他们正在做什么的人都会告诉你这种情况介于“不必要的”和“不需要的”之间。并且&#34;不是一个好主意&#34;。