R 用户定义函数中的子集

R 用户定义函数中的子集,r,subset,user-defined-functions,R,Subset,User Defined Functions,我是编程界的新手,所以如果我问的是一个简单的问题,我会提前通知你。 因此,我需要创建一个UDF,它将根据数据帧中一个变量的级别从数据帧中生成子集 x<-c("a","b","c","a","b","c") y<-c(1,2,3,4,5,6) df<-data.frame(x,y) df 我的想法是,我可以将级别存储到向量、列表或字符中,因此我将获取每个级别并创建子集 listlvls <- lapply(df, function(x) levels(df$x))

我是编程界的新手,所以如果我问的是一个简单的问题,我会提前通知你。 因此,我需要创建一个UDF,它将根据数据帧中一个变量的级别从数据帧中生成子集

 x<-c("a","b","c","a","b","c")
 y<-c(1,2,3,4,5,6)
 df<-data.frame(x,y)
 df
我的想法是,我可以将级别存储到向量、列表或字符中,因此我将获取每个级别并创建子集

listlvls <- lapply(df, function(x) levels(df$x)) # levels as a list
chrlvl<-levels(df$x) # levels as a character enumeration
dflvl<-data.frame(chrlvl) # levels as a dataframe`

我们可以使用
split
将data.frames的子集拆分为
列表

lst1 <- split(df, df$x)

lst1我们可以使用
split
将数据分解成一个
列表

lst1 <- split(df, df$x)

lst1您可以做得更简单:

levels <- unique(as.character(df$x))
newDF <- list()
for(i in 1:length(levels))
{
  newDF[[i]] <- subset(df,df$x==levels[i])
}

级别您可以做得更简单:

levels <- unique(as.character(df$x))
newDF <- list()
for(i in 1:length(levels))
{
  newDF[[i]] <- subset(df,df$x==levels[i])
}

levels我们也可以使用
dplyr中的
group\u split

library(dplyr)
df %>% group_split(x)

我们还可以使用
dplyr
中的
group\u split

library(dplyr)
df %>% group_split(x)

如果要创建三个数据集,则不需要循环
split(df,df$x)
。如果要创建三个数据集,则不需要循环
split(df,df$x)