【问题标题】:How to edit "row.names" after split and cut2 in R?如何在 R 中拆分和 cut2 后编辑“row.names”?
【发布时间】:2014-08-16 16:03:56
【问题描述】:

我想从使用splitcut2 后自动创建的row.names 中编辑掉一些信息。见以下代码:

#Mock data
date_time <- as.factor(c('8/24/07 17:30','8/24/07 18:00','8/24/07 18:30',
                        '8/24/07 19:00','8/24/07 19:30','8/24/07 20:00',
                        '8/24/07 20:30','8/24/07 21:00','8/24/07 21:30',
                        '8/24/07 22:00','8/24/07 22:30','8/24/07 23:00',
                        '8/24/07 23:30','8/25/07 00:00','8/25/07 00:30'))
U. <- as.numeric(c('0.2355','0.2602','0.2039','0.2571','0.1419','0.0778','0.3557',
                 '0.3065','0.1559','0.0943','0.1519','0.1498','0.1574','0.1929'
                 ,'0.1407'))

#Mock data frame
test_data <- data.frame(date_time,U.)


#To use cut2
library(Hmisc)

#Splitting the data into categories
sub_data <- split(test_data,cut2(test_data$U.,c(0,0.1,0.2)))
new_data <- do.call("rbind",sub_data)
test_data <- new_data

您会看到“test_data”将有一个额外的列“row.names”,其中包含“[0.000,0.100).6”、“[0.000,0.100).10”等值。

如何删除“[0.000,0.100)”并保留“.”后面的数字比如 6 和 10 以便我以后可以通过它们的原始行号引用这些行?

还有其他更好的方法吗?

【问题讨论】:

    标签: r hmisc


    【解决方案1】:

    您可以使用正则表达式 (Regex),如下所示:

    rownames(test_data) = gsub(".*[]\\)]\\.", "", rownames(test_data))
    

    如果您不熟悉正则表达式,这很神秘,但它基本上表示匹配任何字符序列 (.*),后跟大括号或圆括号 ([]\\)]),然后是句点 (@ 987654324@) 并将其全部删除。

    双反斜杠是“转义符”,表示双反斜杠后面的字符应按字面意思解释,而不是按其特殊的正则表达式含义(例如,. 表示“匹配任何单个字符”,但 \\. 表示“这真的只是一个时期”)。

    【讨论】:

      【解决方案2】:

      只是为了好玩,你也可以使用regmatches

      > Names <- rownames(test_data)
      > ( rownames(test_data) <- regmatches(Names, regexpr("[0-9]+$", Names))  )
       [1] "6"  "10" "5"  "9"  "11" "12" "13" "14" "15" "1"  "2"  "3"  "4"  "7"  "8" 
      

      【讨论】:

        【解决方案3】:

        您也可以将 sub_data 的名称设置为 NULL。

        names(sub_data) <- NULL     
        test_data <- do.call('rbind', sub_data)
        row.names(test_data)
        #[1] "6"  "10" "5"  "9"  "11" "12" "13" "14" "15" "1"  "2"  "3"  "4"  "7"  "8" 
        

        【讨论】:

          猜你喜欢
          • 2016-10-02
          • 1970-01-01
          • 2021-12-18
          • 2014-02-02
          • 2023-03-16
          • 2021-11-03
          • 2017-04-04
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多