【发布时间】:2016-01-11 19:54:09
【问题描述】:
我正在处理 HCUP 数据,它在一列中有一系列值,需要拆分为多列。以下是 HCUP 数据框供参考:
code label
61000-61003 excision of CNS
0169T-0169T ventricular shunt
所需的输出应该是:
code label
61000 excision of CNS
61001 excision of CNS
61002 excision of CNS
61003 excision of CNS
0169T ventricular shunt
我解决这个问题的方法是使用包 splitstackshape 并使用此代码
library(data.table)
library(splitstackshape)
cSplit(hcup, "code", "-")[, list(code = code_1:code_2, by = label)]
这种方法会导致内存问题。有没有更好的方法来解决这个问题?
一些cmets:
- 数据中除了“T”之外还有很多字母。
- 字母可以在前面或最后,但不能在两个数字之间。
- 在一个范围内没有从“T”到“U”的字母变化
【问题讨论】:
-
嗯,我对 data.table 不是很有经验,但我看不出你的方法是如何工作的 -
Code_1(不应该是code_1吗?)和code_2必须是数字,如果你想建立一个序列,例如hcup <- read.table(header=T, stringsAsFactors = F, text="code label\n61000-61003 excision_of_CNS\n0169T-0169T ventricular_shunt"); cSplit(hcup, "code", "-")[, list(Code = seq(as.integer(gsub("\\D", "", code_1)), as.integer(gsub("\\D", "", code_2)))), by = label]. -
谢谢。我已接受编辑。我并不特别关注“splitstackshape”。有没有可能写一个函数来处理这个问题?
-
这可能对
splitstackshape文档有所帮助:如果您知道列中的所有值在拆分后每行具有相同数量的值,您应该使用cSplit_f函数相反,它使用fread而不是strsplit并且通常更快。 -
所以也许你可以给我们更多的信息。字母
T总是字母?它总是在字符串的末尾吗? -
对这个问题进行第二次猜测,我认为扩展数据框可能不是您最终想要做的事情。将代码列拆分为
begin和end,并存储code.prefix和code.suffix似乎会使匹配变得简单很多,这大概是针对的用例。
标签: r data.table medical data-cleaning splitstackshape