2015-12-14 13 views
5

Có cách nào thông minh để sử dụng chức năng đổi tên trong dplyr khi trong một số trường hợp cột được đổi tên không tồn tại?Tránh lỗi khi sử dụng đổi tên trong dplyr và cột không tồn tại

Ví dụ, tôi muốn sau đây không dẫn đến một lỗi

mtcars%>%rename(miles_per_gallon=mpg,missing_varible=foo) 

(kết quả trong việc này: Lỗi: biến Unknown: foo.)

mà là dataframe với tất cả đổi tên có thể làm xong.

Hiện nay tôi đang rõ ràng kiểm tra xem cột cụ thể tồn tại trước khi đổi tên

Cảm ơn

Iain

+2

Tại sao bạn muốn đổi tên cột không tồn tại? – DatamineR

+2

Không phải tất cả thuộc tính (cột) đều tồn tại cho tất cả các đối tượng (hàng) mà tôi đang làm việc. Điều này có nghĩa là nếu tôi đặt dữ liệu theo một cách cụ thể, tôi có thể kết thúc với khung dữ liệu có ít cột hơn tôi mong đợi - do đó kiểm tra rõ ràng – Iain

Trả lời

5

Đôi khi nó okay để không làm mọi thứ trong dplyr. Đây có thể là một trong những lần đó. Tôi sẽ thiết lập một vectơ hoạt động như một chìa khóa:

namekey <- c(mpg="miles_per_gallon", cyl="cylinders", disp="displacement", hp="horse_power", 
      drat="rear_axle_ratio", wt="weight", qsec="quarter_mile_time", vs="v_s", 
      am="transmission", gear="number_of_gears", carb="number_of_carburetors", 
      foo="missing_variable") 

mtcars1 <- mtcars[,1:2] 
mtcars1$foo <- rnorm(nrow(mtcars1)) 

names(mtcars1) <- namekey[names(mtcars1)] 

head(mtcars1) 
#     miles_per_gallon cylinders missing_variable 
# Mazda RX4      21.0   6  -0.9901081 
# Mazda RX4 Wag     21.0   6  0.2338014 
# Datsun 710     22.8   4  -0.3077473 
# Hornet 4 Drive    21.4   6  1.1200518 
# Hornet Sportabout    18.7   8  0.7482842 
# Valiant      18.1   6  0.4206614 

Một khi bạn có chìa khóa, đó chỉ là một dòng mã đơn giản, dễ hiểu để đổi tên.

+0

Có thể không sao, nhưng vẫn nên thử và giữ mọi thứ trong một paradigm :) –

+0

@ Maxim.K 'dplyr' là một mô hình bao gồm cơ sở R. Đây là một giải pháp cơ sở R, vì vậy trong ý nghĩa đó nó vẫn còn trong một mô hình duy nhất. Điều này chỉ không dựa vào bất kỳ của các thêm vào các giải pháp mà 'dplyr' mang đến cho trò chơi. –

2

Gói plyr có hàm rename() với thông số warn_missing.

plyr::rename(
    mtcars, 
    replace  = c(mpg="miles_per_gallon", foo="missing_varible"), 
    warn_missing = FALSE 
) 

Nếu bạn sử dụng nó, xem xét sử dụng requireNamespace()instead oflibrary(), vì vậy tên chức năng của nó không va chạm với của dplyr.

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