2014-05-23 17 views
7

Jaki jest najskuteczniejszy sposób zastosowania gsub do różnych kolumn? Poniższa nie działaStosowanie gsub do różnych kolumn

x1=c("10%","20%","30%") 
x2=c("60%","50%","40%") 
x3 = c(1,2,3) 
x = data.frame(x1,x2,x3) 
per_col = c(1,2) 
x = gsub("%","",x[,per_col]) 

Jak mogę najefektywniej upuść „%” znak w określonych kolumnach. Czy mogę zastosować go do całej ramki danych? Byłoby to przydatne w przypadku, gdy nie wiem, gdzie są kolumny procentowe.

Odpowiedz

8

apply można użyć, aby zastosować go do całego data.frame

apply(x, 2, function(y) as.numeric(gsub("%", "", y))) 
    x1 x2 x3 
[1,] 10 60 1 
[2,] 20 50 2 
[3,] 30 40 3 
6

Albo można spróbować lapply rozwiązanie:

as.data.frame(lapply(x, function(y) gsub("%", "", y))) 

    x1 x2 x3 
1 10 60 1 
2 20 50 2 
3 30 40 3 
2

Pierwsza odpowiedź działa, ale uważaj, jeśli jesteś używanie data.frame z ciągiem znaków: odpowiedź @docendo discimus zwróci NAs.

Jeśli chcesz zachować zawartość swojej kolumny jako ciąg prostu usunąć as.numeric i konwertowania tabeli do ramki danych po:

as.data.frame(apply(x, 2, function(y) as.numeric(gsub("%", "", y)))) 
    x1 x2 x3 
[1,] 10 60 1 
[2,] 20 50 2 
[3,] 30 40 3 
+0

Jest to również w pewnym sensie rozwiązanie zaproponował @info_seekeR –