将strsplit应用于data.frame中的特定列

时间:2011-10-13 00:33:59

标签: r

我有一个包含分类信息的大型数据框。这是一个例子:

> d <- data.frame(x = c(1,2,3,4), classification = c("cl1.scl1", "cl2", "cl3-bla", "cl4.subclass2"))
> d
  x classification
1 1       cl1.scl1
2 2            cl2
3 3        cl3-bla
4 4  cl4.subclass2

在进行任何进一步处理之前,我需要聚合分类信息,这意味着我必须将分类字符串拆分为“。”并采取第一个令牌。这是我需要的结果:

> d
  x classification
1 1            cl1
2 2            cl2
3 3        cl3-bla
4 4            cl4

目前我正在计算如下:

d$classification = unlist(lapply(d$classification, function (x) strsplit(as.character(x), ".", fixed=TRUE)[[1]][1]))

这很有效,但我花了很长时间来解决这个问题。我假设有一个更优雅的解决方案,我可能错过了。有什么建议?谢谢!

3 个答案:

答案 0 :(得分:12)

稍微短一点的解决方案是

sapply(strsplit(as.character(d$class), "\\."), `[`, 1)

答案 1 :(得分:4)

您可以使用带反向引用的正则表达式。

gsub("(.*)\\.(.*)","\\1",d$classification)

有2个引用(括号中正则表达式的部分),以文字句点分隔。我们用第一个引用的内容替换那些模式的匹配。

答案 2 :(得分:2)

只需删除“。”后面的内容即可。

> sub("\\..+$", "", d$class)
[1] "cl1"     "cl2"     "cl3-bla" "cl4"  

d$classification <-  sub("\\..+$", "", d$classification)
 # I've never been very comfortable with partial name matching.