-2

我在 RStudio 中使用 R 有一个特殊的问题,但我猜一般是 R。我有 2 列,我需要提取部分数据并根据列中的原始数据填充一个新列,对于每个 . 在过去的 8 个小时里,我一直试图自己弄清楚并卡住了。

1 列以“记录”为标题,以 A12DE48、W8DE769、B97AB99、S29VV02Y 和 D684SV2229 等为示例数据。在这些数据中,中间的 Alpha 单位是重要的,我确实为所有这些单位列出了 AB、AN、BU、DE、IK、LS、SV、EEQ、JFS 和 PHT。如您所见,它们位于中间,我希望将这些字母单位提取到新列“项目类型”中,以便我的数据集运行模型,因为这些可能是很好的指标。是否有一种方法可以仅提取与我定义的列表相对应的那些提取物和放置物?因为我只需要在列表中找到的那些,而不是只关注字母表,就像我想将规则设置为从这些选项 AB、AN、BU、DE、IK、LS、SV、EEQ、JFS 中提取的一样,和 PHT,如果它之前至少有 1 个值,之后有 1 个值,不管它的数字、字母或特殊字符在哪里

OTHER 列也有类似情况。“项目来源”这一列的数据点类似于 A134、B223、C111、C2134、D2、E58、T(是的,这只是 T) 要点是初始字母与设置的仓库位置有关,我需要那些,但奇怪的是,对于其中的大量来源,多个来源存在于一个条目中,其中将包括“C111 D207 A965”,而也有许多是空的。如何在此处使用“多个来源”文本替换具有多个来源的内容作为条目并且缺少缺少的内容时如何在此处执行列的事情

任何帮助将不胜感激,因为这次我只被允许使用我不太熟悉的 R,尤其是来自 Java

4

1 回答 1

1

为了争论,假设你有这个数据集:

d = data.frame(record=c("A12DE48","W8DE769","B97AB99","D684SV2229"),
               source=c("A134", "", "T", "C111 D207 A965"),
               stringsAsFactors=FALSE)

对于第一列,您可以简单地使用正则表达式来选择字符串中的最后一组字母,例如:

d$short = gsub(".*\\d+([A-Z]+)\\d+$", "\\1", d$record)

要处理该source列,您可以简单地删除除字母之外的所有内容:

d$source2 = gsub("[^A-Z]+","",d$source)

导致

      record         source short source2
1    A12DE48           A134    DE       A
2    W8DE769                   DE        
3    B97AB99              T    AB       T
4 D684SV2229 C111 D207 A965    SV     CDA

现在您可以决定如何处理多个来源 - 要么全部保留,要么替换它们,例如:

d$source2[nchar(d$source2) > 1] = "multiple sources"
d$source2[nchar(d$source2) == 0] = "empty"

最终结果:

      record         source short          source2
1    A12DE48           A134    DE                A
2    W8DE769                   DE            empty
3    B97AB99              T    AB                T
4 D684SV2229 C111 D207 A965    SV multiple sources
于 2015-12-11T04:56:14.853 回答