2016-08-14 46 views
1

我有一个由三个数字组成的变量,用“。”分隔。前两个数字是ID,最后一个是代表号码。例如在“3.4.1”中,ID将是“3.4”。和代表“1”。我想分割数字并只保留“ID”数字作为新变量。尽管我能够得到我想要的东西,但我确信必须有一种更简单的方法来解决这个问题。这里有一个玩具的例子:拆分变量并保留第一部分

plant<-c("2.3.1","2.3.2","1.2.1","1.2.2","12.3.1","12.3.2") 
height<-c(2.3,2.1,2.5,2.6,3,2.9) 
d<-data.frame(plant,height) 
d$ID<-paste(lapply(strsplit(as.character(d$plant),"[.]"), `[[`, 1),".",lapply(strsplit(as.character(d$plant),"[.]"), `[[`, 2), sep = "") 

有什么建议吗?

回答

1

我们可以使用sub匹配.(逃脱点\\.,因为它是一个元字符),其次是不在一个点([^.]+),直到字符串的结尾,并与""替换一个或多个字符。

d$ID <- sub("\\.[^.]+$", "", d$plant) 
d$ID 
#[1] "2.3" "2.3" "1.2" "1.2" "12.3" "12.3" 

如果我们需要的.也在

sub("[^.]+$", "", d$plant) 
#[1] "2.3." "2.3." "1.2." "1.2." "12.3." "12.3." 
+0

它的工作结束(这似乎不太可能)。你为什么不逃避第二个例子中的点? – Cba

+0

@Cba它在'[]'里面,而不是元字符'.' – akrun