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

beh*_*has 10 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
Run Code Online (Sandbox Code Playgroud)

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

> d
  x classification
1 1            cl1
2 2            cl2
3 3        cl3-bla
4 4            cl4
Run Code Online (Sandbox Code Playgroud)

目前我正在计算如下:

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

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

Hon*_*Ooi 12

稍微短一点的解决方案是

sapply(strsplit(as.character(d$class), "\\."), `[`, 1)
Run Code Online (Sandbox Code Playgroud)


Jos*_*ich 4

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

gsub("(.*)\\.(.*)","\\1",d$classification)
Run Code Online (Sandbox Code Playgroud)

有 2 个引用(括号中的正则表达式部分),由句点分隔。我们用第一个引用的内容替换与该模式匹配的任何内容。