R 每个组的子集特定行
我有这样一个数据帧:R 每个组的子集特定行,r,subset,slice,apply,R,Subset,Slice,Apply,我有这样一个数据帧: Group V2 V3 V4 1 D F W 1 T A L 1 P F P 2 T F L 2 R R O 2 D Y L 2 D F I ...
Group V2 V3 V4
1 D F W
1 T A L
1 P F P
2 T F L
2 R R O
2 D Y L
2 D F I
...
[1] 1 3
[2] 4
[3] 2 3 4
我的清单如下:
Group V2 V3 V4
1 D F W
1 T A L
1 P F P
2 T F L
2 R R O
2 D Y L
2 D F I
...
[1] 1 3
[2] 4
[3] 2 3 4
列表中的每个元素都指示我要为每个组保留哪一行。所以我只想在数据帧中保持Group==1的第1行和第3行;第四排为第二组;第3组的第2行、第3行和第4行等
我已经尽力了,但我还没有找到一个简单的方法,尽管我很确定一定有一个方法使用apply或类似的东西 你能做到
do.call(rbind, Map(function(x, y) x[y,], split(df, df$Group), l1))
# Group V2 V3 V4
#1.1 1 D F W
#1.3 1 P F P
#2 2 D F I
在哪里,
l1 <- list(c(1, 3), 4)
l1你可以做
do.call(rbind, Map(function(x, y) x[y,], split(df, df$Group), l1))
# Group V2 V3 V4
#1.1 1 D F W
#1.3 1 P F P
#2 2 D F I
在哪里,
l1 <- list(c(1, 3), 4)
l1与您的类似,具有以下要处理的对象、data.frame和列表:
df <- read.table(text = "Group V2 V3 V4
1 D F W
1 T A L
1 P F P
2 T F L
2 R R O
2 D Y L
2 D F I
3 E F I
3 F F I
3 G F I
3 T F I", header = T)
l <- list(c(1, 3), 4, c(2:4))
do.call(rbind, lapply(seq_along(l), function(i) df[df$Group == i,][l[[i]],]))
# Group V2 V3 V4
#1 1 D F W
#3 1 P F P
#7 2 D F I
#9 3 F F I
#10 3 G F I
#11 3 T F I
与您的类似,具有以下要处理的对象、data.frame和列表:
df <- read.table(text = "Group V2 V3 V4
1 D F W
1 T A L
1 P F P
2 T F L
2 R R O
2 D Y L
2 D F I
3 E F I
3 F F I
3 G F I
3 T F I", header = T)
l <- list(c(1, 3), 4, c(2:4))
do.call(rbind, lapply(seq_along(l), function(i) df[df$Group == i,][l[[i]],]))
# Group V2 V3 V4
#1 1 D F W
#3 1 P F P
#7 2 D F I
#9 3 F F I
#10 3 G F I
#11 3 T F I
使用tidyverse
library(tidyverse)
df %>%
group_split(Group) %>%
map2_df(l, ~ .x %>%
slice(.y))
# A tibble: 6 x 4
# Group V2 V3 V4
# <int> <fct> <fct> <fct>
#1 1 D F W
#2 1 P F P
#3 2 D F I
#4 3 F F I
#5 3 G F I
#6 3 T F I
库(tidyverse)
df%>%
分组(分组)%>%
map2_df(l,~.x%>%
切片(.y))
#一个tibble:6x4
#组V2 V3 V4
#
#1维F W
#2 1 P F P
#3 2 D F I
#4 3 F I
#5.3 G F I
#6T3TFI
数据
df使用tidyverse的选项
library(tidyverse)
df %>%
group_split(Group) %>%
map2_df(l, ~ .x %>%
slice(.y))
# A tibble: 6 x 4
# Group V2 V3 V4
# <int> <fct> <fct> <fct>
#1 1 D F W
#2 1 P F P
#3 2 D F I
#4 3 F F I
#5 3 G F I
#6 3 T F I
库(tidyverse)
df%>%
分组(分组)%>%
map2_df(l,~.x%>%
切片(.y))
#一个tibble:6x4
#组V2 V3 V4
#
#1维F W
#2 1 P F P
#3 2 D F I
#4 3 F I
#5.3 G F I
#6T3TFI
数据
df