R 在列中的每个重复点拆分数据帧

R 在列中的每个重复点拆分数据帧,r,dataframe,split,R,Dataframe,Split,我有一个数据帧 df<-data.frame(var1=c(1:11),I_var1=c(11:21), var2=c(rep(c(0,0.1),each=5),0.1),var4=c(rep(c(0:4),2),4)) var1 I_var1 var2 var4 1 11 0.0 0 2 12 0.0 1 3 13 0.0 2 4 14 0.0 3 5 15 0.

我有一个数据帧

df<-data.frame(var1=c(1:11),I_var1=c(11:21),
               var2=c(rep(c(0,0.1),each=5),0.1),var4=c(rep(c(0:4),2),4))

var1 I_var1 var2 var4
  1     11  0.0    0
  2     12  0.0    1
  3     13  0.0    2
  4     14  0.0    3
  5     15  0.0    4
  6     16  0.1    0
  7     17  0.1    1
  8     18  0.1    2
  9     19  0.1    3
 10     20  0.1    4
 11     21  0.1    4
df

更新

或更短

library(data.table)
library(dplyr)

df<-data.frame(var1=c(1:11),I_var1=c(11:21),
               var2=c(rep(c(0,0.1),each=5),0.1),var4=c(rep(c(0:4),2),4))

cuts <- which(df$var4==0)
df <- as.data.table(df)
df[,nrow:=.I]
list <- list()
for(i in 1:length(cuts)){ # i <- 2
 if(i==length(cuts)){
   list[[i]] <- df[nrow%in%c(cuts[i]:nrow(df)),]
 }else{
   list[[i]] <- df[nrow%in%c(cuts[i]:(cuts[i+1]-1)),]
 } 
}
库(data.table)
图书馆(dplyr)
df

更新

或更短

library(data.table)
library(dplyr)

df<-data.frame(var1=c(1:11),I_var1=c(11:21),
               var2=c(rep(c(0,0.1),each=5),0.1),var4=c(rep(c(0:4),2),4))

cuts <- which(df$var4==0)
df <- as.data.table(df)
df[,nrow:=.I]
list <- list()
for(i in 1:length(cuts)){ # i <- 2
 if(i==length(cuts)){
   list[[i]] <- df[nrow%in%c(cuts[i]:nrow(df)),]
 }else{
   list[[i]] <- df[nrow%in%c(cuts[i]:(cuts[i+1]-1)),]
 } 
}
库(data.table)
图书馆(dplyr)
df(不确定,如果我完全理解你的话…)

df(不确定,如果我完全理解你的意思….)

df简单地说:

split(df,duplicated(df$var4))

$`FALSE`
  var1 I_var1 var2 var4
1    1     11    0    0
2    2     12    0    1
3    3     13    0    2
4    4     14    0    3
5    5     15    0    4

$`TRUE`
   var1 I_var1 var2 var4
6     6     16  0.1    0
7     7     17  0.1    1
8     8     18  0.1    2
9     9     19  0.1    3
10   10     20  0.1    4
11   11     21  0.1    4
简单地说:

split(df,duplicated(df$var4))

$`FALSE`
  var1 I_var1 var2 var4
1    1     11    0    0
2    2     12    0    1
3    3     13    0    2
4    4     14    0    3
5    5     15    0    4

$`TRUE`
   var1 I_var1 var2 var4
6     6     16  0.1    0
7     7     17  0.1    1
8     8     18  0.1    2
9     9     19  0.1    3
10   10     20  0.1    4
11   11     21  0.1    4

下面是一个
dplyr
解决方案:

df <- data.frame(var1=c(1:11),I_var1=c(11:21),
           var2=c(rep(c(0,0.1),each=5),0.1),var4=c(rep(c(0:4),2),4))

df %>% 
  group_by(var4) %>% 
  mutate(split = row_number()) %>% 
  split(., f = .$split)
df%
分组依据(var4)%>%
变异(拆分=行数())%>%
分割(,f=.$split)

这里有一个
dplyr
解决方案:

df <- data.frame(var1=c(1:11),I_var1=c(11:21),
           var2=c(rep(c(0,0.1),each=5),0.1),var4=c(rep(c(0:4),2),4))

df %>% 
  group_by(var4) %>% 
  mutate(split = row_number()) %>% 
  split(., f = .$split)
df%
分组依据(var4)%>%
变异(拆分=行数())%>%
分割(,f=.$split)

它应该是什么样子?2个列表包含所有列,但是var4应该是0:4,因为我想在每次var4列中出现4时剪切,显示它应该是?2个列表包含所有列,但是var4应该是0:4,因为每次在var4中出现4时,我都希望剪切它columns@P谢谢!!我不知道这个复制函数!真的很有帮助。@P拉波特谢谢!!我不知道这个复制函数!真的很有帮助。
df <- data.frame(var1=c(1:11),I_var1=c(11:21),
           var2=c(rep(c(0,0.1),each=5),0.1),var4=c(rep(c(0:4),2),4))

df %>% 
  group_by(var4) %>% 
  mutate(split = row_number()) %>% 
  split(., f = .$split)