R中是否有一个函数允许选择行名称以小写字母结尾的行,并删除该字母?

R中是否有一个函数允许选择行名称以小写字母结尾的行,并删除该字母?,r,R,我有以下数据帧: data <- as.data.frame(seq(1:5)) rownames(data) <- c("abc-2A","abc-2b", "def-3", "ACD4.54Y", "ghj-5c") data seq(1:5) abc-2A 1 abc-2b 2 def-3 3 ACD4.54Y 4 ghj-5c 5 从原始data.frame中

我有以下
数据帧

data <- as.data.frame(seq(1:5))
rownames(data) <- c("abc-2A","abc-2b", "def-3", "ACD4.54Y", "ghj-5c")
data
             seq(1:5)
abc-2A          1
abc-2b          2
def-3           3
ACD4.54Y        4
ghj-5c          5
  • 从原始
    data.frame
    中的行名称中删除此小写字母。最后的
    data.frame
    将是:

             seq(1:5)
    abc-2b          2
    ghj-5c          5
    
         seq(1:5)
    abc-2A          1
    abc-2           2
    def-3           3
    ACD4.54Y        4
    ghj-5           5
    
  • 我在stack overflow和google上花了相当长的时间,但我不知道怎么做。有人有什么建议吗


    非常感谢

    您可以使用
    dplyr::filter
    函数根据某些条件筛选行。 字符串末尾的小写字母可以用如下正则表达式标识
    [a-z]$
    。将所有这些结合起来会产生以下结果

    library(dplyr)
      mydata <- data.frame(id = c("select thiss", "DONT SELECT"), x = 1:2) 
    
    mydata %>% 
        filter(grepl("[a-z]$", id)) %>% 
        mutate(id = sub("[a-z]$", "", id))
    
               id x
    1 select this 1
    
    库(dplyr)
    mydata%
    筛选器(grepl(“[a-z]$”,id))%>%
    变异(id=sub(“[a-z]$”,“”,id))
    id x
    1选择此1
    
    数据帧上的行名基本上是一个与数据帧列长度相同的向量,另外要求它(通常)是唯一的,并且必须是字符向量

    最简单的方法是将其作为附加列添加:

    data$whatever <- rownames(data)
    
    其中,
    x
    是感兴趣的向量。要删除(即用
    替换有问题的字符)(
    ),请使用
    sub

    sub("[a-z]$", "", x)
    
    把这些放在一起,你会得到什么:

    rownames(data) <- sub("[a-z]$", "", rownames(data))
    

    rownames(data)选择以小写字母结尾的行(来自@Rui Barradas)

    使用基本R
    sub

    rownames(data) <- sub("(.*)[a-z]$", "\\1", rownames(data))
    
    data
    #         seq(1:5)
    #abc-2A          1
    #abc-2           2
    #def-3           3
    #ACD4.54Y        4
    #ghj-5           5
    

    rownames(data)并选择它们:
    data[grep(“[a-z]$”,rownames(data)),drop=FALSE]
    @ruibradas OP是否要选择它们?我以为它们只是作为达到最终输出的一种方式展示出来的。谢谢你的回答,它很有效@RuiBarradas感谢您提供的额外代码!有一个错误:在
    行名
    指令
    中,“ghj-5c”
    没有
    “c”
    。请编辑您的代码。@RuiBarradas谢谢您发现它。我已经编辑了代码。谢谢你的回答。这实际上是我最喜欢的,因为我一直在尝试在我的编码中实现“Tidyverse哲学”。但这并没有完成OP要求的子集设置/过滤。OP实际上不是要求过滤,OP只是使用子集设置作为中间步骤,以确定要执行操作的元素。事实证明,我们不需要这样做。问题当前要求“1.生成此数据帧的子集…其中行名称以小写字母结尾”查看问题的上下文。第(1)项仅要求将其作为获取要在其上执行操作的元件的手段。查看(2)中的“final data.frame”,它显然没有被使用。此外,我的答案中的
    grepl
    命令返回一个可用于过滤的索引向量。
    data[grep("[a-z]$", rownames(data)),, drop = FALSE]
    
    #       seq(1:5)
    #abc-2b        2
    #ghj-5c        5
    
    rownames(data) <- sub("(.*)[a-z]$", "\\1", rownames(data))
    
    data
    #         seq(1:5)
    #abc-2A          1
    #abc-2           2
    #def-3           3
    #ACD4.54Y        4
    #ghj-5           5