按列拆分data.frame并将每列存储为对象,列名称作为对象的名称

时间:2013-04-17 05:31:25

标签: r dataframe col

这是我与R有关的一个基本问题。我知道可能有解决方案来完成我的任务,但我想问为什么我的功能不会起作用。

我有一个看起来像这样的data.frame

A B C
1 2 3
2 3 4

我希望将ABC中的每个值存储到名称为AB和{{1}的单个对象中}。

所以我的功能

C

但它不起作用。有人可以善良并指出我做对了什么吗?

2 个答案:

答案 0 :(得分:1)

假设您的data.frame被命名为“mydf”,以下其中一项应该为您完成。

lapply(names(mydf), function(x) assign(x, mydf[x], envir = .GlobalEnv))
lapply(names(mydf), function(x) assign(x, mydf[, x], envir = .GlobalEnv))

第一个会创建单列data.frame,第二个会创建vector s。

干净会话中的示例:

> rm(list = ls())
> ls()
character(0)
> mydf <- data.frame(A = c(1, 2), B = c(3, 4))
> mydf
  A B
1 1 3
2 2 4
> invisible(lapply(names(mydf), function(x) assign(x, mydf[x], envir = .GlobalEnv)))
> ls()
[1] "A"    "B"    "mydf"
> A
  A
1 1
2 2
> rm(list = ls())
> mydf <- data.frame(A = c(1, 2), B = c(3, 4))
> invisible(lapply(names(mydf), function(x) assign(x, mydf[, x], envir = .GlobalEnv)))
> ls()
[1] "A"    "B"    "mydf"
> B
[1] 3 4

invisible中的上述示例中,用于抑制输出。

答案 1 :(得分:0)

虽然我同意@RomanLustrik的评论,这可能不是一个好主意, 您正在寻找的功能是assign

for (i in colnames(x)) 
  assign(i, subset(x, select=i))

> A
#   A
# 1 1
# 2 2

> B
#   B
# 1 2
# 2 3

话虽如此,您是否了解attach功能?

 ?attach