2014-05-23 26 views
7

Cách hiệu quả nhất để áp dụng gsub cho các cột khác nhau là gì? Sau đây không hoạt độngÁp dụng gsub cho các cột khác nhau

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]) 

Làm thế nào tôi có thể có hiệu quả nhất thả "%" đăng nhập vào các cột cụ thể. Tôi có thể áp dụng nó cho toàn bộ khung dữ liệu không? Điều này sẽ hữu ích trong trường hợp tôi không biết vị trí của các cột phần trăm.

Trả lời

8

Bạn có thể sử dụng apply để áp dụng nó cho toàn bộ 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

Hoặc, bạn có thể thử các giải pháp lapply:

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

Câu trả lời đầu tiên công trình nhưng phải cẩn thận nếu bạn là sử dụng data.frame bằng chuỗi: câu trả lời của @docendo discimus sẽ trả về NAs.

Nếu bạn muốn giữ lại nội dung của cột của bạn là chuỗi chỉ loại bỏ các as.numeric và chuyển đổi bảng của bạn thành một khung dữ liệu sau:

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

Đây cũng là một cách giải pháp đề xuất @info_seekeR –

Các vấn đề liên quan