首页 > 解决方案 > R中矩阵中的字符串操作

问题描述

我有一个这样的矩阵

A = matrix( 
 c("2 (1-3)", "4 (2-6)", "3 (2-4)", "1 (0.5-1.5)", "5 (2.5-7.5)", "7 (5-9)"), 
nrow=3, 
ncol=2) 

我想用“< 5”替换第一个元素小于5(即“0”或“1”或“2”或“3”或“4”)的所有字符串。它应该是:

B = matrix( 
  c("< 5", "< 5", "< 5", "< 5", "5 (2.5-7.5)", "7 (5-9)"), 
  nrow=3, 
  ncol=2) 

有任何想法吗?

标签: rstringmatrixdata-manipulation

解决方案


提取第一个数字,将其转换为数字并将小于 5 的数字替换为"<5".

A[as.numeric(sub('(\\d+).*', '\\1', A)) < 5] <- '< 5'
A

#      [,1]  [,2]         
#[1,] "< 5" "< 5"        
#[2,] "< 5" "5 (2.5-7.5)"
#[3,] "< 5" "7 (5-9)"    

提取第一个数字并将其转换为数字的快捷方式是使用readr::parse_number.

A[readr::parse_number(A) < 5] <- '< 5'

推荐阅读