R 使用其他列的部分数据(可能使用模式识别)在数据集中创建新列

R 使用其他列的部分数据(可能使用模式识别)在数据集中创建新列,r,rstudio,feature-extraction,data-science,R,Rstudio,Feature Extraction,Data Science,我在RStudio中使用R有一个特殊的问题,但我想R一般来说是。 我有两列,其中我需要提取部分数据,并根据列中的原始数据为每个列填充一个新列。在过去的8个小时里,我一直试图自己解决这个问题,但我还是被卡住了 1列的标题为“记录”,示例数据为A12DE48、W8DE769、B97AB99、S29VV02Y和D684SV2229等。在这些数据中,中间的Alpha单位是重要的 我确实有一个所有这些的列表,AB、AN、BU、DE、IK、LS、SV、EEQ、JFS和PHT。 正如你所看到的,它们位于中间,

我在RStudio中使用R有一个特殊的问题,但我想R一般来说是。 我有两列,其中我需要提取部分数据,并根据列中的原始数据为每个列填充一个新列。在过去的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中提取的一样,前提是它之前至少有一个值,之后至少有一个值,而不管它的数字、字母表或特殊字符在哪里

另一列也有类似的情况。此列“Item Source”的数据点类似于A134、B223、C111、C2134、D2、E58、T(是的,其中一个就是T) 主要的一点是,初始字母表与设置的仓库位置相关,我需要这些位置,但问题是,对于大量仓库位置,单个条目中存在多个来源,其中包括“C111 D207 A965”,同时也有许多是空的。 我如何在这里做专栏的事情,同时用文本“multiple source”作为条目替换那些具有多个源的内容,并对缺少的内容具有未知性


如果有任何帮助,我将不胜感激,因为这次我只允许使用我还不太熟悉的R,特别是来自Java的R

d = data.frame(record=c("A12DE48","W8DE769","B97AB99","D684SV2229"),
               source=c("A134", "", "T", "C111 D207 A965"),
               stringsAsFactors=FALSE)
对于第一列,您只需使用regexps选择字符串中的最后一组字母,例如:

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

请在输入数据的基础上显示一个小的和预期的输出,非常感谢,虽然我确实说过他们在中间,但这确实是我的一个关键错误,我没有包括一个“记录”条目以字母表结尾的例子,这里是这样的例子“S29 VV02Y”。非常感谢你下半场的表现