我正在处理急诊室的ICD-9代码数据(健康诊断),这是三位数的代码,后面有2个小数(例如: 499,499.1,499.51等)。有些特殊代码用字母"V“代替第一个数字,例如"V10.46”。
每次急诊室访问(行)最多可以有11个诊断代码(列),所以我使用reshape()将数据集更改为长格式。现在,我想使用those ()删除那些小数点。但是R不能用一个角色来做什么!我得到了这个错误:Math.factor中的错误(dtl$diag):
这篇文章有一些相关性,但我想知道是否有更好的方法?R: Remove character observations in a variable
有什么想法吗?
发布于 2012-02-19 00:31:48
基于@Vincent的出色回答,如果目标是对数据使用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))基于您的错误消息“对因素没有意义”,您的数据的该列已被读取为字符串(因为某些行中的"V“),而R的默认行为是将字符串列转换为因子(类似类别)。
如果您收到关于gsub不处理因素的错误,您需要首先将您的列转换为字符串:
mydf$columname <- as.character(mydf$columnname)然后你就可以像以前一样继续了。
发布于 2012-02-18 23:58:36
您可以使用正则表达式移除点和之后的所有内容。
x <- c("499", "499.1", "499.51", "V10.46")
gsub("\\..*", "", x)
# Output:
# [1] "499" "499" "499" "V10"发布于 2012-02-19 11:22:14
对于前三个字母,您可以使用子字符串函数。
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"https://stackoverflow.com/questions/9345278
复制相似问题