2016-11-15 41 views
0

我有一個像分割字符串在中東

1 Aken Jan van Jan van Aken 
2 Albani Stephan Stephan Albani 

字符串列表,我想在中間正好分裂,所以我能保持後期。

有沒有比循環這個更好的選擇?

library(qdap) 
test <- "Aken van Jan Jan van Aken" 
paste0(strsplit(test," ")[[1]][((word_count(test)/2)+1):word_count(test)], collapse=' ') 
+0

對不起,它是在qdap – erocoar

回答

1

考慮dput(df)爲:

structure(list(s1 = structure(1:2, .Label = c("Aken Jan van Jan van Aken", 
"Albani Stephan Stephan Albani"), 
class = "factor")), .Names = "s1", 
row.names= c(NA, -2L), class = "data.frame") 

你可以試試這個:

df %>% 
    mutate(half_string= 
    substr(s1, nchar(as.character(s1))/2, nchar(as.character(s1)))) %>% 
    select(half_string) 

或使用stringr包:

df %>% 
    mutate(half_string = str_sub(s1, start=nchar(as.character(s1))/2)) %>% 
    select(half_string) 

注:nchar(as.character(s1))/2需要如果您想使用上限值,請嘗試使用nchar(as.character(s1))/2 + 0.5而不是

2

這是一些代碼來獲得第一個名字。

test <- "Aken van Jan Jan van Aken" 
test1 <- "Albani Stephan Stephan Albani" 
l=list(test, test1) 
i=lapply(l, function(x) substr(x, start = 1, stop = ceiling(nchar(x)/2))) 
j=lapply(l, function(x) substr(x, start = ceiling(nchar(x)/2), stop = nchar(x))) 
0

如果您始終想要在「中間」即每6個單詞分割一次,請獲取最後3個...我不會「T認爲這是一個非常一致的分析機制,但我不知道整個數據集顯然這應該與包裝工作:stringi

f.split <- function(str){ 
     as.character(
      stri_extract_all_regex(
       str, 
       sprintf('((\\w+) ?){%s}$', 
         stri_count_words(str)/2), 
       simplify = T) 
      ) 
    } 

它也向量化,所以迭代是不是一個問題:

f.split(c("Aken Jan van Jan van Aken","Albani Stephan Stephan Albani")) 
[1] "Jan van Aken" "Stephan Albani"