r - 从数据框中子集一列,将子集保留为数据框
问题描述
我有一个包含过滤器的表,例如
> X = data.frame(filter1=c(1,1,1),filter2=c(1,1,0),filter3=c(1,0,0))
> X
filter1 filter2 filter3
1 1 1 1
2 1 1 0
3 1 0 0
我喜欢根据条件选择过滤器:
> selected_filters = c(1:2)
> X[,paste0("filter",c(selected_filters))]
filter1 filter2
1 1 1
2 1 1
3 1 0
但是,如果我只选择了一列,则数据框将转换为列表
> selected_filters = c(2)
> X[,paste0("filter",c(selected_filters))]
[1] 1 1 0
如何仅选择一列将结果保留为数据框?期望的结果看起来像
filter2
1 1
2 1
3 0
解决方案
我们需要drop = FALSE
X[, paste0("filter",c(selected_filters)), drop = FALSE]
# filter2
#1 1
#2 1
#3 0
如果我们看一下?Extract
,Usage 会显示
x[i, j, ... , drop = TRUE]
在描述中,它说
drop - 用于矩阵和数组。如果为 TRUE,则将结果强制转换为可能的最低维度(参见示例)。这仅适用于提取元素,不适用于替换。有关详细信息,请参阅下降。
请注意,subset
行为是不同的,因为它是默认的drop = FALSE
subset(X, select = paste0("filter",c(selected_filters)))
推荐阅读
- c# - ListjoinedTeams 使用 C# 抛出异常
- python - (非常简单)获取菜单中的下一个元素?
- python - div 元素内的文本没有被 Beautifulsoup 和请求打印出来
- c# - 无法跟踪实体类型“Unidad”的实例,因为另一个实例具有相同的键值 EF
- javascript - 过滤数组中的对象值
- java - AWS SDK 1.11.844 在连接到 Kinesis Stream 时连续抛出错误
- javascript - React中的setTimeout,无法清除
- android - Aspose Cell FileNotFoundException:EROFS(只读文件系统)
- azure - 通过 REST API 执行 AppInsight 查询
- reactjs - Redux 存储和本地存储有什么区别?