2010-09-13 14 views
14

मैं "।" पर एक स्ट्रिंग को विभाजित करने की कोशिश कर रहा हूं। और "।" से पहले और बाद में दो तारों के साथ अतिरिक्त कॉलम बनाएं।strsplit rowwise लागू करें

tes<-c("1.abc","2.di","3.lik") 
dat<-c(5,3,2) 
h<-data.frame(tes,dat) 
h$num<-substr(h$tes,1,1) 

h$prim<-unlist(strsplit(as.character(h$tes),"\\."))[2] 
h$prim<-sapply(h$tes,unlist(strsplit(as.character(h$tes),"\\."))[2]) 

I'd h$prim की तरह "abc", "डि", "lik" को रोकने के लिए .. हालांकि यह पता लगाने में सक्षम नहीं कर रहा हूँ। मुझे लगता है कि strsplit वेक्टरकृत नहीं है, लेकिन फिर मैंने सोचा कि sapply संस्करण काम करना चाहिए था। हालांकि मुझे लगता है यह

सादर, होना चाहिए आसान :-) // एम

उत्तर

30

यह चाल

R> sapply(strsplit(as.character(h$tes), "\\."), "[[", 2) 
[1] "abc" "di" "lik" 
+1

allright .. हालांकि के रूप में आसान नहीं के रूप में मैंने सोचा था कि .. यह क्या है " [[" चीज़? – Misha

+5

@ मिशा: स्ट्रस्प्लिट के बारे में मुश्किल बात यह है कि यह एक सूची देता है। वह "[[" चीज उस सूची से निकालने का कार्य है। 2 उस फ़ंक्शन के लिए तर्क है, जिसका अर्थ है कि यह स्ट्रस्प्लिट द्वारा लौटाई गई सूचियों का दूसरा तत्व लेता है। यह भी देखें? "[[" आर और थक्स @ आरसीएस में, यह चालाक है! –

+2

यह एक सूचकांक ऑपरेटर है। "[[" का उपयोग एकल तत्व ड्रॉप नामों का चयन करने के लिए किया जा सकता है, 'निकालें' देखें। आप "[" का भी उपयोग कर सकते हैं। – rcs

7

यह आरसीएस 'जवाब के रूप में ही है क्या करना चाहिए, लेकिन करने के लिए आसान हो सकता है समझ में:

> sapply(strsplit(as.character(h$tes), "\\."), function(x) x[[2]]) 
[1] "abc" "di" "lik" 
+0

@ आप सभी ... अब मुझे मिल गया। // एम – Misha

9

stringr पैकेज के साथ यह और भी आसान है:

library(stringr) 
str_split_fixed(h$tes, fixed("."), 2)[, 2] 
7

यह प्रश्न स्टैक ओवरव्लो पर कई बार प्रकट होता है।

तुम्हारा के रूप में

सटीक रूप में:

इस विषय में कुछ इसी तरह के सवाल:

और अगर आप गति के बारे में परवाह है तो आप tip from John answer about fixed parameter to strsplit विचार करना चाहिए।

1

वैकल्पिक रूप से, आप अपने आप को 2 तत्व बाहर खींच का काम बचा सकता है अगर आप एक ही समय में दोनों स्तंभ जोड़ने:

tes <- c("1.abc","2.di","3.lik") 
dat <- c(5,3,2) 
h <- data.frame(tes, dat, stringsAsFactors=FALSE) 
values <- unlist(strsplit(h$tes, ".", fixed=TRUE)) 
h <- cbind(h, matrix(values, byrow=TRUE, ncol=2, 
        dimnames=list(NULL, c("num", "prim")))) 
संबंधित मुद्दे