删除以字符(Vxxx)开头的记录以启用R中的floor()命令

删除以字符(Vxxx)开头的记录以启用R中的floor()命令,r,character,floor,R,Character,Floor,我正在处理急诊室ICD-9代码数据(健康诊断),这是三位数代码,后面最多有两位小数(例如:499、499.1、499.51等)。一些特殊代码的字母“V”不是第一个数字,例如“V10.46” 每次急诊室就诊(行)最多可以有11个诊断代码(列),因此我使用Reformate()将数据集更改为长格式。现在我想使用floor()删除这些小数点。但是R不能用一个角色来制造东西!我得到这个错误:数学错误。因子(dtl$diag):对于因子来说,下限没有意义 这篇文章有一定的相关性,但我想知道是否有更好的方法

我正在处理急诊室ICD-9代码数据(健康诊断),这是三位数代码,后面最多有两位小数(例如:499、499.1、499.51等)。一些特殊代码的字母“V”不是第一个数字,例如“V10.46”

每次急诊室就诊(行)最多可以有11个诊断代码(列),因此我使用Reformate()将数据集更改为长格式。现在我想使用floor()删除这些小数点。但是R不能用一个角色来制造东西!我得到这个错误:数学错误。因子(dtl$diag):对于因子来说,下限没有意义

这篇文章有一定的相关性,但我想知道是否有更好的方法


有什么想法吗

您可以使用正则表达式删除点和后面的所有内容

x <- c("499", "499.1", "499.51", "V10.46")
gsub("\\..*", "", x)
# Output:
# [1] "499" "499" "499" "V10"

xBuilding off@Vincent Zoonekynd的优秀答案,如果目的是在数据上使用
floor
,您只需去掉“V”并在其余部分调用
floor

x <- c("499", "499.1", "499.51", "V10.46")
# replace all occurences of "V" with nothing ("") in x:
x.stripped <- gsub("V", "", x) 
# convert to numeric so we can use floor():
x.floor <- floor(as.numeric(x.stripped))

然后您可以像以前一样继续操作。

对于前三个字母,您可以使用substring函数

icd9 <- factor(c("499", "499.1", "499.51", "V10.46"))
substr(as.character(icd9),1,3)# as.character is used 
                              # because icd9 is factor in your data

我是新手,“\\..*”指的是什么?以及“”?它是一个正则表达式——它的意思是“替换一个文本(在正则表达式中是“\”,反斜杠需要在R中转义,因此“\”),后跟任何内容(the
*
)而不是任何内容(
)”。因此,它会删除后面的任何内容,并包含一个小数点,该小数点模拟
楼层
。虽然我觉得你也想脱掉第一个“V”对吧?查看
?gsub
,看看是否可以执行类似的操作来删除“V”(在这个答案中,它比gsub更容易)。然后,您可以使用
as.numeric
将字符串转换为数字。这个gsub表达式可以在调用某个列时使用吗?在您的示例中,如果我想对第4列中的值执行此操作,我会执行以下操作:gsub(“\\..*”,“”,x$4)?几乎:
x[[4]]好的,但这会指定第4列-我想用没有小数的新值替换第4列中的所有值。我感兴趣的专栏叫“diag”。这是我的尝试:dtlong$diag=gsub(“\\..*”,“”,dtlong$diag)?谢谢嗨,咖啡。我喜欢这个想法,但问题是,如果你删除“V”和“floor”,那么代码就无法与共享同一数字的现有两位数代码区分开来。(例如,“V10.46”将与所有代码“10.x”相同,所有代码都将变为“10”)。我试图用0替换V,但它仍然与现有代码合并。你能用多个数字替换“V”吗?嗯,如果你想保留前面的V,请使用@VincentZoonekynd的答案。我用“919”替换了“V”-它与任何代码都不同,但仍然满足数字格式的要求!
icd9 <- factor(c("499", "499.1", "499.51", "V10.46"))
substr(as.character(icd9),1,3)# as.character is used 
                              # because icd9 is factor in your data
[1] "499" "499" "499" "V10"