Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Split在R中创建新的数据帧,并基于可变条件重命名_R_Dataframe_Split_Subset_Rename - Fatal编程技术网

使用Split在R中创建新的数据帧,并基于可变条件重命名

使用Split在R中创建新的数据帧,并基于可变条件重命名,r,dataframe,split,subset,rename,R,Dataframe,Split,Subset,Rename,我正试图根据R中的一些条件将一个大数据帧分割成更小的数据帧。 我希望这些数据帧中的每一个都能根据它们被分割的变量来命名,但是由于有超过1660个新的“子”数据帧,我无法手动进行命名 整个数据帧的一个示例: ID LENGTH GRADE CODE DURATION STATUS 1 1 A1 ABC Less than 10 Y 2 2 A1 ABC

我正试图根据R中的一些条件将一个大数据帧分割成更小的数据帧。 我希望这些数据帧中的每一个都能根据它们被分割的变量来命名,但是由于有超过1660个新的“子”数据帧,我无法手动进行命名

整个数据帧的一个示例:

ID LENGTH    GRADE    CODE      DURATION    STATUS

1   1          A1      ABC      Less than 10     Y            
2   2          A1      ABC      More than 10     Y            
3   1          A1      DEF      Less than 10     Y                     
4   2          A2      ABC      Less than 10     Y                      
5   1          B1      ABC      More than 10     Y                      
6   3          B2      DEF      Less than 10     Y 
有超过900000个条目被7个变量分成大约1660个非空组——我通过创建一个新的分组数据框发现了这一点

> Grouped_DF<- DF %>% group_by(LENGTH,GRADE,CODE,DURATION,STATUS,...)

> nrow(Grouped_Data)
[1] 1660
输出的一个示例:

> SplitGroups
$1.A1.ABC.Less Than 10.N`
# A tibble: 10 x 65
# Groups:   ID [10]
# ... with 65 variables: 
现在我想将非空数据帧重命名为,例如,“1.A1.ABC.小于10.N”(或类似名称),并将其存储到全局环境中

我知道这可以使用子集来完成,例如:

1.A1.ABC.LessThan10.N <- subset(DF, LENGTH==1 & GRADE=="A1" & CODE=="ABC" & .....) 

1.A1.ABC.LessThan10.N我还建议将您的数据帧保存在列表中,但这里有一个解决方案

您的数据:

df <- data.frame(ID=1:6, LENGTH=c(1,2,1,2,1,3),
             GRADE=c(rep("A1",3),"A2","B1","B2"),
             CODE=c("ABC","ABC","DEF","ABC","ABC","DEF"),
             DURATION=c("Less than 10", "More than 10", "Less than 10",
                      "Less than 10", "More than 10", "Less than 10"),
             STATUS=rep("Y",6), stringsAsFactors=F)
将数据框拆分为一个列表(正如您已经做的…)

splitGroups 0]
将删除所有空的data.frames。将其存储在列表中可能是更好的方法,因为更容易系统地与data.frames交互。请参阅一些技巧。我们可以使用
Filter(函数(x)nrow(x)>0,splitGroups)
1.A1.ABC.LessThan10.N <- subset(DF, LENGTH==1 & GRADE=="A1" & CODE=="ABC" & .....) 
df <- data.frame(ID=1:6, LENGTH=c(1,2,1,2,1,3),
             GRADE=c(rep("A1",3),"A2","B1","B2"),
             CODE=c("ABC","ABC","DEF","ABC","ABC","DEF"),
             DURATION=c("Less than 10", "More than 10", "Less than 10",
                      "Less than 10", "More than 10", "Less than 10"),
             STATUS=rep("Y",6), stringsAsFactors=F)
grp.df <- df %>% 
         group_by_all() %>%
         mutate(newnames=paste0("Z",ID,LENGTH,GRADE,CODE,gsub(" ", "", DURATION),STATUS))
split.df <- split(grp.df, grp.df$newnames)
for (I in 1:length(split.df)) { assign(unique(split.df[[I]]$newnames), split.df[[I]]) }