2017-06-26 70 views
1

我有一個非常類似的問題this one,但我有一個更復雜的情況。如何將strsplit應用於R中的數據框?

這裏是我的示例代碼:

test = data.frame(x = c(1:4), 
       y = c("/abc/werts/h1-1234", "/abc/fghye/seths/h2-234", 
          "/abc/gvawrttd/hyeadar/h3-9868", "/abc/qqras/x1-7653")) 
test$y = as.character(test$y) 

而且我想這樣的輸出:

1 h1-1234 
2 h2-234 
3 h3-9868 
4 x1-7653 

我想:

test$y = tail(unlist(strsplit(test$y, "/")), 1) 

然而,上面的代碼返回結果:

1 h1-1234 
2 h1-1234 
3 h1-1234 
4 h1-1234 

所以我的問題是,如何修改我的代碼,以便我可以得到我想要的輸出?

在此先感謝!

回答

3

這裏是你正在尋找的行:

test$y = sapply(strsplit(test$y, "/"), tail, 1) 

它適用tail在由strsplit返回列表中的每個元素。

+0

哇!它的工作原理!非常感謝! – BigD

+0

您通過一個可重複的例子讓我的任務變得簡單。 –

1

下面是使用sub匹配零個或多個字符(.*),接着其後的零個或多個字符/\\/)不屬於捕獲爲一組(([^/]*)),直到結束時($)一個/一個選項字符串,並替換爲捕獲組的反向引用(\\1

test$y <- sub(".*\\/([^/]*)$", "\\1", test$y) 
test$y 
#[1] "h1-1234" "h2-234" "h3-9868" "x1-7653" 
+1

它也可以工作!非常感謝! – BigD

相關問題