2014-06-17 19 views
5

Tôi cố gắng để recode một biến tố trong R và sử dụng đoạn mã sau:R recode biến - INCOMPLETE_STRING bất ngờ

library(car) 
napier_captureComplexity=recode(napier$a_SpatialConnectivity,"'1 - Very simple and clear:  no diagrams, single sheets'=1;'2 - Reasonably simple: some simple diagrams or second sheets'=2;'3 - Reasonably complex: multiple diagrams or sheets but can be followed'=3;'4 - Moderately complex: multiple diagrams and sheets'=4;'5 - Very complex'=5;",as.factor.result=FALSE) 

Và nhận được thông báo lỗi sau:

Error in parse(text = range[[1]][1]) : <text>:1:1: unexpected INCOMPLETE_STRING 1: '4 - Moderately complex 

Với a^bên dưới số 4

Tôi không chắc điều gì đang gây ra điều này, tôi đã tự hỏi về: thông qua mã nhưng tôi không sử dụng c() và mã thực hiện tốt trên các yếu tố khác trong tập dữ liệu có si giá trị chuỗi milar trong chúng.

Mọi trợ giúp đều được đánh giá cao!

Trả lời

1

recode dường như giải thích: như thể hiện một dải giá trị, ngay cả khi nó nằm trong một chuỗi và: được hiểu là kết thúc sớm chuỗi. Ví dụ:

x = c("a","b","c") 
recode(x, "'a'=1; 'b'=2; 'c'=3;") 
[1] 1 2 3 

nhưng

x = c("a:d","b","c") 
recode(x, "'a:d'=1; 'b'=2; 'c'=3;") 
Error in parse(text = range[[1]][1]) : 
    <text>:1:1: unexpected INCOMPLETE_STRING 
1: 'a 
    ^

Trong mỗi ví dụ tôi đã thử các chuỗi kết thúc vào:, gây ra một lỗi.

+0

Đây không phải là giải pháp, tôi nghĩ vậy.) –

4

Thực tế là do ":" trong phần mô tả của bạn. Chức năng này sử dụng một số câu hỏi số evalstrsplit lẻ để hoạt động. Nó kết thúc bằng cách chia nhỏ trong ":" bởi vì đó là một mã đặc biệt trong cú pháp của họ và dường như không có cách nào để thoát khỏi điều đó.

Nhưng tôi giả sử napier$a_SpatialConnectivity là một yếu tố với các cấp đã cho? Bạn có thể recode biến bằng cách thiết lập rõ ràng các mức trong cuộc gọi factor().

mylevels <- c("1 - Very simple and clear:  no diagrams, single sheets", 
    "2 - Reasonably simple: some simple diagrams or second sheets", 
    "3 - Reasonably complex: multiple diagrams or sheets but can be followed", 
    "4 - Moderately complex: multiple diagrams and sheets", 
    "5 - Very complex") 

napier_captureComplexity <- as.numeric(factor(napier$a_SpatialConnectivity, levels=mylevels)) 

Điều đó sẽ yêu cầu mức 1: 5, điều đó chỉ xảy ra là cách bạn cố gắng mã hóa chúng.

+0

Tôi đã theo phương pháp của bạn, tất cả các giá trị đã trở thành 'NA' ... Bạn có chắc chắn phương thức của bạn hoạt động không? –

+0

Vâng, tôi chắc chắn. Nếu bạn định nghĩa 'napier <-data.frame (a_SpatialConnectivity = sample (mylevels, 20, replace = T))' sau khi bạn định nghĩa 'mylevels', mã sẽ chạy và tạo ra các giá trị số, chứ không phải NA. – MrFlick

+0

Tôi nghĩ có gì đó sai trong mã của bạn. nếu bạn sử dụng 'napier <-', kết quả là * napier sẽ chỉ có một cột *. Trong trường hợp của tôi, đó là 'tiền lương người lớn'. Theo phương pháp của bạn, 'mylevels <-c (" <=50K"," > 50K ") data.frame (tiền lương = mẫu (mylevels, 938, replace = T))', mã này tạo ra một data.frame với hàng 938, và bên trong dữ liệu vẫn là "<=50K"," > 50K", chứ không phải ** 1 ** và ** 2 ** và điều này không liên quan gì đến dữ liệu gốc trong 'mức lương người lớn $ '. Tôi đã làm việc này trong hơn một giờ. –