我正在尝试筛选或子集化数据框,以便仅包括内容以特定字母开头的列的行。
我已经尝试使用
这最后一次尝试至少没有给我报错,但也没有帮助我创建数据框的子集。我能否将此grep与上述函数之一结合使用,以获得我的结果呢?
我曾认为这个任务会很容易,但我已经花了整整一天的时间,却没有成功。那么,我错过了什么吗?
*编辑:太神奇了-发布几分钟后就收到了几个非常有帮助的回复。谢谢大家,谢谢Stack Overflow!*
我已经尝试使用
subset
、filter
和select
(包括dplyr
中的starts_with
),但似乎找不到实现所需功能的正确语法。我找到的所有示例都演示了根据值(例如x>1
)进行过滤,而不是通过函数进行过滤。我只成功创建了各种各样的错误消息。
参考文献: https://www.rdocumentation.org/packages/dplyr/versions/0.7.8/topics/select|选择特定列 https://www.rdocumentation.org/packages/dplyr/versions/0.7.8/topics/filter_all|基于逻辑条件过滤数据 https://www.rdocumentation.org/packages/tidyselect/versions/0.1.1/topics/select_helpers|选择辅助函数 https://www.rdocumentation.org/packages/base/versions/3.5.1/topics/startsWith|检查字符串是否以指定字符开头 Filter data.frame rows by a logical condition|基于逻辑条件过滤数据框的行
library(tidyverse)
a <- c("A1435","A6732","A8841","B7623","B7714","B3154")
b <- c("place 1", "place 2", "place 3", "place 4", "place 5", "place 6")
test_frame <- data.frame(a,b)
这是我尝试过的一些事情:
subset <- subset(test_frame, subset = startsWith(test_frame$a, "A"))
## Error in startsWith(test_frame$a, "A") : non-character object(s)
subset <- subset(test_frame, subset = startsWith(test_frame[,1], "A") == 1)
## Error in startsWith(test_frame[, 1], "A") : non-character object(s)
subset <- test_frame %>% dplyr::select(test_frame, starts_with("A", ignore.case = TRUE, vars = a))
## Error: `test_frame` must evaluate to column positions or names, not a list
subset <- dplyr::select(test_frame, starts_with("A", ignore.case = TRUE, vars = a))
## Error in inds_combine(.vars, ind_list) : Position must be between 0 and n
subset <- test_frame %>% dplyr::filter_if(test_frame$a, ~ starts_with("A"))
## Error: Can't convert a `factor` object to function
subset <- vars_select(test_frame, starts_with("A"))
## Error: `vars` must be a character vector
subset <- dplyr::filter(test_frame, dplyr::starts_with("A"), all_vars(. == a))
## Error: No tidyselect variables were registered
subset <- test_frame$a %>% grep("^A", .)
## [1] 1 2 3
这最后一次尝试至少没有给我报错,但也没有帮助我创建数据框的子集。我能否将此grep与上述函数之一结合使用,以获得我的结果呢?
我曾认为这个任务会很容易,但我已经花了整整一天的时间,却没有成功。那么,我错过了什么吗?
*编辑:太神奇了-发布几分钟后就收到了几个非常有帮助的回复。谢谢大家,谢谢Stack Overflow!*
setStringsAsFactors = TRUE
。 - boskitest_frame <- data.frame(a,b,stringsAsFactors=FALSE); subset(test_frame, startsWith(a, "A"))
,无需使用'verse syntax。 - Frank