Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/218.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
根据R中的单元格值建立数据帧子集列表_R_List_Dataframe_For Loop_Subset - Fatal编程技术网

根据R中的单元格值建立数据帧子集列表

根据R中的单元格值建立数据帧子集列表,r,list,dataframe,for-loop,subset,R,List,Dataframe,For Loop,Subset,我有一个数据框,我想削减,并保持每个子集作为一个新的列表元素。根据单元格的值给出切割。例如,如果我有: > df X1 X2 1 red 1 2 blue 3 3 green 2 4 pierre 10 5 pink 4 6 blue 3 7 green 2 8 eric 25 9 purple 8 10 red 1 11 anna 30 12 blue 3 13 green 2 14 bla

我有一个数据框,我想削减,并保持每个子集作为一个新的列表元素。根据单元格的值给出切割。例如,如果我有:

> df

     X1   X2
1     red  1
2    blue  3
3   green  2
4  pierre 10
5    pink  4
6    blue  3
7   green  2
8    eric 25
9  purple  8
10    red  1
11   anna 30
12   blue  3
13  green  2
14  black  5
15 yellow  6
16  marie 40
17 violet  7 

> df2

      X1    X2  X3
1 pierre  eric  77
2   anna marie 100
我想把df分成一个子集,其中的限制是行,其中X1的值等于df2中X1(上限)和X2(下限)给出的值。 为了更清楚,我希望我的列表如下所示:

> list
[[1]] 
     X1   X2    
4  pierre 10
5    pink  4
6    blue  3
7   green  2
8    eric 25
[[2]]
     X1   X2
11   anna 30
12   blue  3
13  green  2
14  black  5
15 yellow  6
16  marie 40
我尝试使用for循环来执行此操作:

> for (i in 1:nrow(df2)){
   list[i]<-list(df[which(df[,"X1"]==df2[i,"X1"]):which(df[,"X1"]==df2[i,"X2"]),])
  }     
>用于(i in 1:nrow(df2)){
使用mapply列出[i]:

使用mapply:


使用
for
循环是可行的,尽管@zx8754的
mapply()
方法应该更有效

test <- vector("list", nrow(df2))
for(i in 1:nrow(df2)){
  x <- which(df[, "X1"] == df2[i, "X1"])
  y <- which(df[, "X1"] == df2[i, "X2"])
  test[[i]] <- df[x:y,]
}

> test
[[1]]
      X1 X2
4 pierre 10
5   pink  4
6   blue  3
7  green  2
8   eric 25

[[2]]
       X1 X2
11   anna 30
12   blue  3
13  green  2
14  black  5
15 yellow  6
16  marie 40

test使用
for
循环是可行的,尽管@zx8754的
mapply()
方法应该更有效

test <- vector("list", nrow(df2))
for(i in 1:nrow(df2)){
  x <- which(df[, "X1"] == df2[i, "X1"])
  y <- which(df[, "X1"] == df2[i, "X2"])
  test[[i]] <- df[x:y,]
}

> test
[[1]]
      X1 X2
4 pierre 10
5   pink  4
6   blue  3
7  green  2
8   eric 25

[[2]]
       X1 X2
11   anna 30
12   blue  3
13  green  2
14  black  5
15 yellow  6
16  marie 40
测试
test <- vector("list", nrow(df2))
for(i in 1:nrow(df2)){
  x <- which(df[, "X1"] == df2[i, "X1"])
  y <- which(df[, "X1"] == df2[i, "X2"])
  test[[i]] <- df[x:y,]
}

> test
[[1]]
      X1 X2
4 pierre 10
5   pink  4
6   blue  3
7  green  2
8   eric 25

[[2]]
       X1 X2
11   anna 30
12   blue  3
13  green  2
14  black  5
15 yellow  6
16  marie 40