这看起来是个简单的问题,但我还没有找到一个清晰的解决方案。我在R中有一个向量,我想从向量中删除某些元素,但出于各种原因,我想避免使用vector[vector!=“thiselement”]符号。特别是,下面是我尝试做的事情:
# this doesnt work
all_states = gsub(" ", "-", tolower(state.name)) %>% filter("alaska")
# this doesnt work either
all_states = gsub(" ", "-", tolower(state.name)) %>% filter(!= "alaska")
# this does work but i want to avoid this approach to filtering
all_states = gsub(" ", "-", tolower(state.name))
all_states = all_states[all_states != "alaska"]
这能用简单的方式完成吗?2预先感谢您的帮助!
EDIT -我之所以纠结于此,是因为我只能在网上找到关于基于 Dataframe 列的过滤的东西,例如:
my_df %>% filter(col != "alaska")
但是我这里使用的是向量而不是 Dataframe
4条答案
按热度按时间vs3odd8k1#
正如@r_31415在评论中提到的,像
stringr
这样的包提供了可以更好地解决这个问题的函数。使用
str_subset(string, pattern, negate=FALSE)
,可以过滤字符向量,如默认情况下,
pattern
被解释为正则表达式。因此,要搜索包含特殊字符(如(
、*
和?
)的文本模式,可以使用修饰符函数fixed(literal_string)
将模式字符串括起来,而不是使用double-backslash escape或raw-string since R 4.0.0很抱歉发布了一个5个月前的问题,以存档一个更简单的解决方案。
包
dplyr
可以通过以下方式过滤字符向量:第一种方法允许你使用正则表达式过滤,第二种方法使用较少的单词,因为包
dplyr
导入包magrittr
,尽管屏蔽了它的函数,如extract
,但没有屏蔽占位符.
。占位符
.
的详细信息可以在forward-pipe operator%>%
的帮助中找到,此占位符主要有三种用法:在这里,我们利用它的第三个用途。
t2a7ltrp2#
你也许想试试。
要获取更多类似
extract
的函数,请加载magrittr
包并键入?alises
。zzlelutf3#
可以肯定dplyr只在data.frame上运行,这里有一个两行代码的例子,将向量强制到data.frame,然后再返回。
或者是一个粗略的班轮:
efzxgjgh4#
在tidyverse中得到想要的结果的一个简单方法是将向量放入tibble中,然后取出向量。
具有所需输出:[1]“亚拉巴马“亚利桑那”“阿肯色州”“加州”“科罗拉多”......