已经找到了答案,但我正在阅读的所有答案都需要一些我以前没有的大量知识。
我想解决的问题是如何根据数据框的变量自动为值指定名称。
所以想象一下,我在包数据集中有一个ChickWeight数据框。
数据框中有50只小鸡,每只小鸡有几行,具体取决于时间。
我想分配这样的东西但是和所有的小鸡一样。无需手动输入所有50个。
Chick1 <- ChickWeight[which(ChickWeight$Chick == 1),]
...
...
Chick50 <- ChickWeight[which(ChickWeight$Chick == 50),]
谢谢!
答案 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