分组数据中的子集数据框
Subsetting dataframe in grouped data
我有一个数据框,其中包含一列因子,在按因子级别分组后,我希望每第 n 行将其子集化为 select。例如,
my_df <- data.frame(col1 = c(1:12), col2 = rep(c("A","B", "C"), 4))
my_df
col1 col2
1 1 A
2 2 B
3 3 C
4 4 A
5 5 B
6 6 C
7 7 A
8 8 B
9 9 C
10 10 A
11 11 B
12 12 C
每第 2 行子集 select 应产生 my_new_df 作为,
col1 col2
1 4 A
2 10 A
3 5 B
4 11 B
5 6 C
6 12 C
我在 dplyr 中试过:
my_df %>% group_by(col2) %>%
my_df[seq(2, nrow(my_df), 2), ] -> my_new_df
我得到一个错误:
Error: Can't subset columns that don't exist.
x Locations 4, 6, 8, 10, and 12 don't exist.
ℹ There are only 2 columns.
为了查看nrow函数是否有问题,我尝试直接使用数字。所以,
my_df %>% group_by(col2) %>%
my_df[seq(2, 4, 2), ] -> my_new_df
也报错了,
Error: Can't subset columns that don't exist.
x Location 4 doesn't exist.
ℹ There are only 2 columns.
Run `rlang::last_error()` to see where the error occurred.
我的期望是它会运行对每组数据进行子集化,然后将它们组合成'my_new_df'。我对 group_by 工作原理的理解显然是错误的,但我一直在思考如何克服这个错误。任何帮助将不胜感激。
尝试:
my_df %>%
group_by(col2)%>%
slice(seq(from = 2, to = n(), by = 2))
# A tibble: 6 x 2
# Groups: col2 [3]
col1 col2
<int> <chr>
1 4 A
2 10 A
3 5 B
4 11 B
5 6 C
6 12 C
如果你想做其他不基于 col2 的操作,你可能想在切片后取消分组。
这里有一个data.table
选项:
library(data.table)
data <- as.data.table(my_df)
data[(rowid(col2) %% 2) == 0]
col1 col2
1: 4 A
2: 5 B
3: 6 C
4: 10 A
5: 11 B
6: 12 C
或基数 R:
my_df[as.logical(with(my_df, ave(col1, col2, FUN = function(x)
seq_along(x) %% 2 == 0))), ]
col1 col2
4 4 A
5 5 B
6 6 C
10 10 A
11 11 B
12 12 C
我有一个数据框,其中包含一列因子,在按因子级别分组后,我希望每第 n 行将其子集化为 select。例如,
my_df <- data.frame(col1 = c(1:12), col2 = rep(c("A","B", "C"), 4))
my_df
col1 col2
1 1 A
2 2 B
3 3 C
4 4 A
5 5 B
6 6 C
7 7 A
8 8 B
9 9 C
10 10 A
11 11 B
12 12 C
每第 2 行子集 select 应产生 my_new_df 作为,
col1 col2
1 4 A
2 10 A
3 5 B
4 11 B
5 6 C
6 12 C
我在 dplyr 中试过:
my_df %>% group_by(col2) %>%
my_df[seq(2, nrow(my_df), 2), ] -> my_new_df
我得到一个错误:
Error: Can't subset columns that don't exist.
x Locations 4, 6, 8, 10, and 12 don't exist.
ℹ There are only 2 columns.
为了查看nrow函数是否有问题,我尝试直接使用数字。所以,
my_df %>% group_by(col2) %>%
my_df[seq(2, 4, 2), ] -> my_new_df
也报错了,
Error: Can't subset columns that don't exist.
x Location 4 doesn't exist.
ℹ There are only 2 columns.
Run `rlang::last_error()` to see where the error occurred.
我的期望是它会运行对每组数据进行子集化,然后将它们组合成'my_new_df'。我对 group_by 工作原理的理解显然是错误的,但我一直在思考如何克服这个错误。任何帮助将不胜感激。
尝试:
my_df %>%
group_by(col2)%>%
slice(seq(from = 2, to = n(), by = 2))
# A tibble: 6 x 2
# Groups: col2 [3]
col1 col2
<int> <chr>
1 4 A
2 10 A
3 5 B
4 11 B
5 6 C
6 12 C
如果你想做其他不基于 col2 的操作,你可能想在切片后取消分组。
这里有一个data.table
选项:
library(data.table)
data <- as.data.table(my_df)
data[(rowid(col2) %% 2) == 0]
col1 col2
1: 4 A
2: 5 B
3: 6 C
4: 10 A
5: 11 B
6: 12 C
或基数 R:
my_df[as.logical(with(my_df, ave(col1, col2, FUN = function(x)
seq_along(x) %% 2 == 0))), ]
col1 col2
4 4 A
5 5 B
6 6 C
10 10 A
11 11 B
12 12 C