根据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