r - 按组拆分数据帧,同时在每个部分中保持某些因子水平
问题描述
我正在尝试split()
根据某个列将数据框切割成碎片。split()
函数非常好,可以为每个因子级别获取一个数据框,然后lapply()
在列表输出中使用。
问题是,我不知道如何始终在每个组中保留某个因素。请看下面的例子,它应该更清楚。
这是一个例子:
set.seed(555)
test_df <- data.frame(df_groups = sample(rep(x = c("x", "y", "z"), 10), 10))
split(test_df, test_df$df_groups)
输出:
> split(test_df, test_df$df_groups)
$x
df_groups
1 x
4 x
7 x
8 x
$y
df_groups
2 y
5 y
10 y
$z
df_groups
3 z
6 z
9 z
好的,现在我想拆分数据框,但始终在每个组中保持“y”级别。输出应如下所示:
> split(test_df, test_df$df_groups)
$x
df_groups
1 x
4 x
7 x
8 x
2 y
5 y
10 y
$y
df_groups
2 y
5 y
10 y
$z
df_groups
3 z
6 z
9 z
2 y
5 y
10 y
解决方案
lapply
您可以使用rbind
您希望保留的特定组。
keep_val <- 'y'
keep_group <- subset(test_df, df_groups == keep_val)
lapply(split(test_df, test_df$df_groups), function(x)
if(x$df_groups[1] == keep_val) x else rbind(x, keep_group))
您也可以类似地使用purrr
' -imap
purrr::imap(split(test_df, test_df$df_groups),
~if(.y == keep_val) .x else rbind(.x, keep_group))
#$x
# df_groups
#1 x
#4 x
#7 x
#8 x
#2 y
#5 y
#10 y
#$y
# df_groups
#2 y
#5 y
#10 y
#$z
# df_groups
#3 z
#6 z
#9 z
#2 y
#5 y
#10 y
推荐阅读
- haskell - 堆栈安装可执行文件到自定义位置
- javascript - React Downshift JS全选onClick
- javascript - How to make a function that returns the factorial of each integer in an array
- spring-boot - 在 Java 中抛出的自定义异常应该在 Thymeleaf 中显示
- html - 将 html 表达式存储在变量中(Angular)
- backend - 带有 Keras 的自定义层:是否可以在基于零的 softmax 层的输出中将输出神经元设置为 0 作为输入层中的数据?
- python - 适合在 Matplotlib 中溢出外部视图的圆形补丁?
- reactjs - 运行 heroku-postbuild 时出现错误“找不到模块:无法解析 './User.scss'”
- vue.js - 未指定文件的 vue-service-cli 构建错误
- outlook-restapi - 我可以从 Oulook API 获取当天的日程安排会议吗?