R 为另一个数据帧的每个ID创建数据帧
我查看了问题数据库,但没有找到答案,如果我遗漏了什么,很抱歉。 问题很简单:如何基于另一个数据帧的列ID创建新的数据帧 如果这在原始df中:R 为另一个数据帧的每个ID创建数据帧,r,subset,R,Subset,我查看了问题数据库,但没有找到答案,如果我遗漏了什么,很抱歉。 问题很简单:如何基于另一个数据帧的列ID创建新的数据帧 如果这在原始df中: structure(list(ID = structure(c(12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 13L, 13L, 13L, 13L, 13L, 13L, 13L, 13L, 13L, 13L, 13L, 13L, 13L,
structure(list(ID = structure(c(12L, 12L, 12L, 12L, 12L, 12L,
12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 13L, 13L, 13L,
13L, 13L, 13L, 13L, 13L, 13L, 13L, 13L, 13L, 13L, 13L, 13L, 13L,
13L, 13L, 13L, 13L, 13L, 13L, 13L, 13L, 13L), .Label = c("B0F",
"B12T", "B1T", "B21T", "B22F", "B26T", "B2F", "B33F", "B3F",
"B4F", "B7F", "P1", "P21", "P24", "P25", "P27", "P28", "P29"), class = "factor"),
EC = c(953L, 838L, 895L, 2170L, 2140L, 1499L, 2120L, 881L,
902L, 870L, 541L, 891L, 876L, 860L, 868L, 877L, 3630L, 3400L,
2470L, 2330L, 1810L, 2190L, 2810L, 2200L, 2440L, 1111L, 2460L,
2210L, 2340L, 1533L, 880L, 2475L, 2350L, 2440L, 1456L, 2320L,
2220L, 2990L, 2240L, 2210L, 2630L)), .Names = c("ID", "EC"
), row.names = 40:80, class = "data.frame")
如何根据ID创建两个新的df?例如,我可以有两个新的df,分别命名为B21T和P1?
我知道我可以用一个子集来做,但是如果我有很多ID,那就需要很多时间
因此,我认为我要寻找的是一种自动化子集函数的方法。您可以将所需的所有不同子集放入
列表中,然后从中提取它们:
#DF <- structure(list(ID = structure(c(12L ...
#all different "ID"s
ids <- as.character(unique(DF$ID))
#create empty list to insert all different subsets
myls <- vector("list", length(ids))
#insert the different subsets
for(i in 1:length(ids))
{
myls[[i]] <- DF[DF$ID == ids[i],]
}
names(myls) <- ids
不过,如果您有很多“ID”,这可能需要一些时间
编辑
Jilber的答案是,对于
循环,Waaay比更好。此处用作拆分(DF,DF$ID,drop=T)
您可以将所需的所有不同子集放入列表中,然后从中提取它们:
#DF <- structure(list(ID = structure(c(12L ...
#all different "ID"s
ids <- as.character(unique(DF$ID))
#create empty list to insert all different subsets
myls <- vector("list", length(ids))
#insert the different subsets
for(i in 1:length(ids))
{
myls[[i]] <- DF[DF$ID == ids[i],]
}
names(myls) <- ids
不过,如果您有很多“ID”,这可能需要一些时间
编辑
Jilber的答案是,对于
循环,Waaay比更好。这里用作拆分(DF,DF$ID,drop=T)
考虑DF
是您的数据帧,然后执行以下操作:
df$ID <- droplevels(df$ID) # drop unused levels from `ID`
list2env(split(df, df$ID), envir=.GlobalEnv)
df$ID考虑df
是您的data.frame,然后执行以下操作:
df$ID <- droplevels(df$ID) # drop unused levels from `ID`
list2env(split(df, df$ID), envir=.GlobalEnv)
df$ID您可以用split
替换for
循环的。请参见?拆分
。您可以将
的循环替换为拆分
。请参见?拆分。