根据字符串的第一个字母在R中分组类别?

时间:2015-04-23 13:51:03

标签: r text dataset grouping

我在R中加载了一个数据集,我有一个包含文本的列。此文本不是唯一的(任何行可以具有相同的值),但它表示行的特定条件,因此该字段的前3-5个字母将表示该行所属的组。让我用一个例子来解释。

有3个不同的行,只显示我需要分组的id和列:

ID........... TEXTFIELD    
1............ VGH2130    
2............ BFGF2345    
3............ VGH3321

有了前面的例子,我想在数据框中创建一个新列,在那里设置组,例如

ID........... TEXTFIELD........... NEWCOL    
1............ VGH2130............. VGH    
2............ BFGF2345............ BFGF    
3............ VGH3321............. VGH

为了确定将在这个新列中形成的组,我想创建一个包含可能组的数组(因为所有行都将包含在其中一个组中)(例如{{1 }})

任何人都可以放弃如何有效地做到这一点吗? (没有让for循环必须这样做,因为我有数百万行,这需要很长时间)

3 个答案:

答案 0 :(得分:3)

您也可以尝试

> data$group <- (str_extract(TEXTFIELD, "[aA-zZ]+"))
> data
  ID TEXTFIELD group
1  1   VGH2130   VGH
2  2  BFGF2345  BFGF
3  3   VGH3321   VGH

答案 1 :(得分:1)

如果df是您的data.frame:

,您可以尝试
df$NEWCOL <- gsub("([A-Z)]+)\\d+.*","\\1", df$TEXTFIELD)

> df
#  ID TEXTFIELD NEWCOL
#1  1   VGH2130    VGH
#2  2  BFGF2345   BFGF
#3  3   VGH3321    VGH

答案 2 :(得分:1)

文本字段的数字前面总是有3个或4个字母吗?

您可以通过执行以下操作来检查:

nrow(data[grepl("[aA-zZ]{1,4}\\d+", data$TEXTFIELD)== TRUE, ]) #this gives number of rows where TEXTFIELD contains 3,4 letters followed by digits

如果是,那么:

require(stringr)
data$NEWCOL <- str_extract(data$TEXTFIELD, "[aA-zZ]{1,4}")

最后一步:

data$group <- ifelse(data$NEWCOL == "VGH", "Group Name", ifelse(data$NEWCOL == "BFGF", "Group Name", ifelse . . . . ))

# Complete the ifelse statement to classify all groups