2011-11-09 21 views
12

में संख्यात्मक स्तंभ के लिए पात्रों के जोड़े मैं इस तरह एक dataframe है:dataframe

V1  V2  V3 
1 1 3423086 3423685 
2 1 3467184 3467723 
3 1 4115236 4115672 
4 1 5202437 5203057 
5 2 7132558 7133089 
6 2 7448688 7449283 

मैं V1 स्तंभ को बदलने और नंबर से पहले chr जोड़ना चाहते हैं। बस इस तरह:

V1  V2  V3 
1 chr1 3423086 3423685 
2 chr1 3467184 3467723 
3 chr1 4115236 4115672 
4 chr1 5202437 5203057 
5 chr2 7132558 7133089 
6 chr2 7448688 7449283 

क्या आर में ऐसा करने का कोई तरीका है?

+0

'paste' (' sep' तर्क के लिए विशेष ध्यान के साथ) –

उत्तर

17

रेगेक्स पैटर्न "^" (किसी भी चरित्र-श्रेणी के ब्रैकेट के बाहर) "चरित्र" -क्लास आइटम (उर्फ "स्ट्रिंग" के अन्य चरित्र भाषाओं के पहले चरित्र से पहले बिंदु का प्रतिनिधित्व करता है)। यह सिर्फ "chr" का एक स्टेम के साथ प्रत्येक तत्व वेक्टर में "चरित्र" की शुरुआत बदल देता है। यह परोक्ष एक "सांख्यिक" इनपुट मूल्य के लिए "चरित्र" इसलिए परिणाम के मोड बदल coerces।

> dat$V1 <- sub("^", "chr", dat$V1) 
> dat 
    V1  V2  V3 
1 chr1 3423086 3423685 
2 chr1 3467184 3467723 
3 chr1 4115236 4115672 
4 chr1 5202437 5203057 
5 chr2 7132558 7133089 
6 chr2 7448688 7449283 

, ज़ाहिर है, paste("chr", dat$V1, sep="") का इस्तेमाल किया है सका, लेकिन मैंने सोचा था कि एक regex समाधान neater हो सकता है।

+0

धन्यवाद Dwin। इससे मेरा काम बनता है! :) – Lisann

+3

क्या हथौड़े किया अखरोट के लिए कहा? मैं आपको 'पेस्ट' में तोड़ दूंगा। – Andrie

5

sprintf सादा संयोजन की तुलना में बहुत अधिक शक्तिशाली है।

dat$V1 <- sprintf('chr%i', dat$V1) 
3

हम भी interaction उपयोग कर सकते हैं:

df$V1 <- interaction("chr", df$V1, sep = "") 
df 

या sqldf का उपयोग कर:

library(sqldf)  
df$V1 <- as.character(df$V1) 
df$V1 <- sqldf("select 'chr'|| V1 as V1 from df") 
+0

मैं एकाधिक कॉलम पर इंटरैक्शन का उपयोग कैसे करूं? 'डीएफ [, 2: 3] <- इंटरैक्शन (डीएफ [2: 3]," एडटेक्स्ट ", सीपी =" ") 'सॉर्ट त्रुटि फेंकता है – Vasim

संबंधित मुद्दे