Tôi đã có một khung dữ liệu 1000 x 100000 lớn như sau để mã hóa thành các giá trị số.ghi lại dữ liệu trong r
myd <- data.frame (v1 = sample (c("AA", "AB", "BB", NA), 10, replace = T),
v2 = sample (c("CC", "CG", "GG", NA), 10, replace = T),
v3 = sample (c("AA", "AT", "TT", NA) , 10, replace = T),
v4 = sample (c("AA", "AT", "TT", NA) , 10, replace = T),
v5 = sample (c("CC", "CA", "AA", NA) , 10, replace = T)
)
myd
v1 v2 v3 v4 v5
1 AB CC <NA> <NA> AA
2 AB CG TT TT AA
3 AA GG AT AT CA
4 <NA> <NA> <NA> AT <NA>
5 AA <NA> AA <NA> CA
6 BB <NA> TT TT CC
7 AA GG AA AT CA
8 <NA> GG <NA> AT CA
9 AA <NA> AT <NA> CC
10 AA GG TT AA CC
Mỗi biến có khả năng bốn giá trị duy nhất.
unique(myd$v1)
[1] AB AA <NA> BB
Levels: AA AB BB
unique(myd$v2)
[1] CC CG GG <NA>
Levels: CC CG GG
Giá trị duy nhất như vậy có thể là bất kỳ kết hợp nào, tuy nhiên bao gồm hai bảng chữ cái (ngoại trừ NA). Ví dụ "A", "B" trong trường hợp đầu tiên sẽ kết hợp "AA", "AB", "BB". Mã số cho các giá trị này sẽ là 1, 0, -1 tương ứng. Tương tự cho bảng chữ cái chữ cái thứ hai "C", "G" tạo "CC", "CG", "GG", do đó các mã số sẽ là 1, 0, -1 tương ứng. Vì vậy, các myd trên cần phải được recoded để:
myd
v1 v2 v3 v4 v5
1 0 1 <NA> <NA> 1
2 0 0 -1 -1 1
3 1 -1 0 0 0
4 <NA> <NA> <NA> 0 <NA>
5 1 <NA> 1 < NA> 0
6 -1 <NA> -1 -1 -1
7 1 -1 1 0 0
8 <NA> -1 <NA> 0 0
9 1 <NA> 0 <NA> -1
10 1 -1 -1 1 -1
Nếu bạn muốn trả về 'data.frame' ed sử dụng 'do.call (data.frame, lapply (myd, function (.x) {- (as.numeric (.x) -2)}))' hoặc 'as.data.frame (lapply (myd, function (.x) {- (as.numeric (.x) -2)})) ' – mnel