【问题标题】:Removing character elements from a vector从向量中删除字符元素
【发布时间】:2018-12-13 12:24:52
【问题描述】:

我试图弄清楚如何从列表中删除几个字符(不是一个字符):

-首先我将我的data.frame(单列)转换为A的字符列表A2[]<-lapply(A,as.character)

-然后我将其转换为A3<-unlist(A2, recursive = TRUE, use.names = TRUE),生成一个向量,其中包含A1 中出现的所有原子成分。

最后我使用str_remove(A3, ".") 删除,在这种情况下,点。见下文:

     A1      A2      A3      A4      A5      A6      A7      A8      A9     A10 
    "*"     "*"     "*"     "*"     "*"     "*"     "*"     "*"     "*"     "*" 
    A11     A12     A13     A14     A15     A16     A17     A18     A19     A20 
    "*"   "=1-"   "*C:"     "I"     "."     "."     "."     "."     "."     "." 
    A21     A22     A23     A24     A25     A26     A27     A28     A29     A30 
    "."     "2"   "V7b"     "."     "."     "."     "."     "I"     "."     "." 

问题是应用str_remove() 向量的其他元素作为“*”会丢失。这正常吗?

 [1] ""     ""     ""     ""     ""     ""     ""     ""     ""     ""    
 [11] ""     "1-"   "C:"   ""     ""     ""     ""     ""     ""     ""    
 [21] ""     ""     "7b"   ""     ""     ""     ""     ""     ""     ""  

有没有更好的方法来做到这一点?它只是删除“。”该列的:

12     =1-
13     *C:
14      I
15      .
16      .
17      .
18      .
19      .
20      .
21      .
22      2
23    V7b
24      .
25      .
26      .
27      .
28      I
29      .
30      .
31      .

得到:

=1-
*C:
I
2
V7b
I

【问题讨论】:

  • 您在使用str_remove 之前所做的大部分工作似乎都是不必要的。首先你使用as.list 然后unlist?为什么?
  • 感谢您的评论。所以,你的意思是unlist 可以直接完成。我将重新提出问题。
  • 我什至不知道你为什么需要unlist。你就不能A1[[1]]吗?
  • 我试过了,但它不起作用。我需要原子 c。申请str_remove。但是as.list 是不必要的。

标签: r list vector character


【解决方案1】:

句号是一个元字符(见here),所以试着像这样转义它-

str_remove(A3, “\\.”)

编辑:

您可以使用str_remove_all 从任意长度的向量中删除多个字符,这会从供应字符向量中删除每个匹配项。您还可以提供str_remove_all多个模式一次匹配,允许您只用一行代码执行多个操作。

library(stringr)
a <- c("hello. this. is. text","this. is. also. text","here. is. even. more. text")
remove_these <- c("\\.","text")
str_remove_all(a, paste(remove_these, collapse = "|"))

这会返回:

"hello this is "     "this is also "      "here is even more "

【讨论】:

  • 你知道它是否可以适用于多个元素字符吗?或者只是每次重复到最后一个向量相同的选项。
  • 查看我的编辑。你是这个意思吗? str_remove 将删除字符向量中每个项目的第一个匹配项,而 str_remove_all 将删除每个匹配项。
  • 我的意思是例如str_remove_all(a, "\\." &amp;&amp; "\\x") ...我知道这不起作用,但以防万一我想知道如何避免重复。
  • 啊,是的——很好的问题,你可以做到。查看我的编辑。
  • 非常机智!某种意义上的明显。谢谢,
猜你喜欢
  • 1970-01-01
  • 2011-12-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-05
  • 2020-05-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多