2013-05-14 28 views
5

Belirli bir dizeyi büyük bir data.frame ile değiştirmeye çalışıyorum. Ben sadece aşağıdaki çözümü buldum ama gsub özgün data.frame düzenini korumaz. Bunu nasıl başarabilirim.Veritabanındaki dizgeyi değiştirin

Bir dizeyi değiştirmek ve df düzenini değiştirmek istemiyorum demek istiyorum.

test<-data.frame(a=c("a","b","c","d"),b=c("a","e","g","h"),c=c("i","j","k","a")) 
gsub("a","new",test) 

Thx

cevap

14

Sen lapply isteyeceksiniz character veya factor girişleri ve daha sonra uygun şekilde gsub başvuru için data.frame testler aracılığıyla:

Bu örneği ele alalım. Sonuç, list olacaktır, ancak as.data.frame bunu düzeltir.

test$val <- 1:4 # a non character/factor variable 
(test2 <- as.data.frame(lapply(test,function(x) if(is.character(x)|is.factor(x)) gsub("a","new",x) else x))) 
    a b c val 
1 new new i 1 
2 b e j 2 
3 c g k 3 
4 d h new 4 
class(test2$val) # to see if it is unchanged 
[1] "integer" 
+0

Tüm ifadeyi neden parantez içine sardınız? –

+3

@RichardSmith Bu, ifadeyi sonucunu konsola görülebilir bir şekilde döndürür. Atama normalde görünmez olarak iade edilir. – James

6
as.data.frame(sapply(test, function(x) gsub("a", "new", x))) 
+0

teşekkürler, ama bu beni karakter matrisi verir, benim df Ben sadece örnek ile çalışıyordu ayrıca – rainer

+1

verileri işlerken sonra sorunlarla da sayısal değerlere sahiptir. – Thomas