数据框分配

时间:2015-11-21 19:59:16

标签: r dataframe subset

我今天带着一个新问题回来了。

已经找到了答案,但我正在阅读的所有答案都需要一些我以前没有的大量知识。

我想解决的问题是如何根据数据框的变量自动为值指定名称。

所以想象一下,我在包数据集中有一个ChickWeight数据框。

数据框中有50只小鸡,每只小鸡有几行,具体取决于时间。

我想分配这样的东西但是和所有的小鸡一样。无需手动输入所有50个。

Chick1 <- ChickWeight[which(ChickWeight$Chick == 1),]
...
...
Chick50 <- ChickWeight[which(ChickWeight$Chick == 50),]

谢谢!

2 个答案:

答案 0 :(得分:1)

正如他们在评论中提到的,对于数据框列表:

ldf <- split(ChickWeight, ChickWeight$Chick)

然后访问列表的元素,例如小鸡20的数据框:

ldf$`20`

如果要为每个数据框分隔对象,请取消列出数据框列表:

list2env(ldf, .GlobalEnv)

访问数据框:

`20`

如果我们不想将数字作为数据框名称,我们可以创建一个新列ChickWeight$id,添加前缀Chick_,然后按照我们之前的步骤进行操作:

ChickWeight$id <- paste0("Chick_", ChickWeight$Chick)
# List of data frames
ldf <- split(ChickWeight, ChickWeight$id)
# Separated objects
list2env(ldf, .GlobalEnv)

要访问数据框,例如:Chick_20

答案 1 :(得分:1)

我找到了一种方法来准确地创建你想要的东西。对于我来说,批量分配对n00b来说是一个挑战。

df<-ChickWeight

#PREPARING VARIABLE NAMES

df$Chick<-paste("Chick_",df$Chick,sep="");
df$Chick<-as.character(factor(df$Chick, levels=unique(df$Chick)))

#FUNCTION TO BE ABLE TO BATCH ASSIGN

assign_ouistiti<-function(NAMES, VALUES) {mapply(assign, NAMES, VALUES, MoreArgs = list(envir = .GlobalEnv));invisible()}

#PRODUCE ALL THE VARIABLES YOU WANTED

assign_ouistiti(names(split(df,df$Chick)),split(df,df$Chick))

您现在可以直接访问有关小鸡的数据:

> Chick_9
    weight Time   Chick Diet
96      42    0 Chick_9    1
97      51    2 Chick_9    1
98      59    4 Chick_9    1
99      68    6 Chick_9    1
100     85    8 Chick_9    1
101     96   10 Chick_9    1
102     90   12 Chick_9    1
103     92   14 Chick_9    1
104     93   16 Chick_9    1
105    100   18 Chick_9    1
106    100   20 Chick_9    1
107     98   21 Chick_9    1