2016-08-14 54 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