繁体   English   中英

在R中split和cut2之后如何编辑“ row.names”?

[英]How to edit “row.names” after split and cut2 in R?

我想从row.names中删除一些信息,这些信息会在使用splitcut2自动创建。 请参阅以下代码:

#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,以便以后可以按其原始行号引用这些行?

还有其他更好的方法吗?

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

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

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

双反斜杠是“转义符”,表示应按字面意义解释双反斜杠后面的字符,而不是按其特殊的Regex含义进行解释(例如, .表示“匹配任何单个字符”,而\\\\.表示“这实际上只是一段时间”)。

只是为了好玩,您还可以使用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" 

您也可以将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" 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM