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

将strsplit应用于data.frame中的特定列,r,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$cla

我有一个带有分类信息的大数据框。以下是一个例子:

> 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$classification = unlist(lapply(d$classification, function (x) strsplit(as.character(x), ".", fixed=TRUE)[[1]][1]))

这是可行的,但我花了很长时间才弄明白。我想有一个更优雅的解决方案,我可能错过了。有什么建议吗?谢谢

需要一个稍短的解决方案

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

可以将正则表达式与反向引用一起使用

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

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

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

>sub(“\\..+$”,“”,d$类)
[1] “cl1”“cl2”“cl3 bla”“cl4”

你的题目有点误导人;这并不是将函数应用于特定列,而是如何操作strsplit的结果。谢谢,这是一个很好的解决方案!我不知道我可以简单地在数据帧上应用正则表达式。从技术上讲,您将正则表达式应用于字符向量(
d$classification
不是数据帧)。回答得很好<代码>`[`
对我来说是新的,你能提供一些背景或文档吗?
gsub("(.*)\\.(.*)","\\1",d$classification)
> sub("\\..+$", "", d$class)
[1] "cl1"     "cl2"     "cl3-bla" "cl4"  

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