Tôi có một biến thể của vấn đề oh-so-chung làm thế nào để kết hợp với nhau trong điều R.R - sáp nhập một danh sách các khung dữ liệu vào một khung dữ liệu với các giá trị thiếu bằng hàng
Tôi có một bộ file .txt trong một thư mục cụ thể, và tôi đã viết một hàm:
- tạo ra một danh sách các tập tin mà tôi muốn, và sau đó cho mỗi tập tin
- đọc file
- tập con dữ liệu (để chỉ trích xuất các hàng và cột quan tâm)
- thực hiện một số phép tính trên dữ liệu
- thêm các giá trị mới này vào danh sách.
Những gì tôi kết thúc với một danh sách với cấu trúc sau:
>str(DataList)
List of 16
$ :'data.frame': 14 obs. of 2 variables:
..$ Sample: Factor w/ 14 levels "Sample_1A","Sample_1B",..: 1 2 3 4 5 6 7 8 9 10 ...
..$ Var1 : num [1:14] 27.9 33.8 29.9 29.4 28.8 ...
$ :'data.frame': 14 obs. of 2 variables:
..$ Sample: Factor w/ 14 levels "Sample_1A","Sample_1B",..: 1 2 3 4 5 6 7 8 9 10 ...
..$ Var2 : num [1:14] 24.6 27 26.8 26.7 27.2 ...
$ :'data.frame': 12 obs. of 2 variables:
..$ Sample: Factor w/ 14 levels "Sample_1A","Sample_1B",..: 1 2 3 4 5 6 7 9 11 12 ...
..$ Var3 : num [1:12] 31.4 35.6 34 35.7 32.5 ...
Đối với mỗi biến (Var1, Var2, Var3,
...) Tôi có một cột Sample
và một cột của giá trị số.
Sample
luôn là yếu tố có 14 cấp độ; các mức này giống nhau cho mỗi biến.
Vấn đề là một số biến (như Var3
ở trên) không có quan sát cho từng cấp độ Sample
.
Điều tôi muốn kết thúc là một khung dữ liệu với 14 hàng (một cho mỗi cấp độ Sample
). Cột đầu tiên phải là Sample
; sau đó cho mỗi biến, cần có một cột chứa các giá trị số tương ứng, như vậy:
Sample Var1 Var2 Var3
Sample_1A 27.9 24.6 31.4
Sample_1B 33.8 27 35.6
...
Sample_3B 26.8 29.7 NA
Tôi đã cố gắng để làm điều này với do.call
, nhưng không biết làm thế nào để vượt qua các đối số cho by
; cbind
không hài lòng vì thiếu các giá trị. Bất kỳ suy nghĩ về cách làm điều này?
Cảm ơn!
EDIT: Theo yêu cầu của Joran của:
>dput(DataList[1:3])
list(structure(list(Sample = structure(1:14, .Label = c("Sample_1B", "Sample_1C", "Sample_1D", "Sample_2C", "Sample_2A", "Sample_2D", "Sample_3B", "Sample_3C", "Sample_3A", "Sample_3D", "Sample_4B", "Sample_4C", "Sample_4A", "Sample_4D"), class = "factor"), Var1 = c(26.9333333333333, 29.17, 28.9366666666667, 28.9233333333333, 28.61, 28.63, 26.7933333333333, 34.6633333333333, 30.4966666666667, 28.4433333333333, 27.4533333333333, 28.3, 27.9633333333333, 27.2366666666667)), .Names = c("Sample", "Var1"), row.names = c(NA, -14L), class = "data.frame"), structure(list(Sample = structure(1:14, .Label = c("Sample_1B", "Sample_1C", "Sample_1D", "Sample_2C", "Sample_2A", "Sample_2D", "Sample_3B", "Sample_3C", "Sample_3A", "Sample_3D", "Sample_4B", "Sample_4C", "Sample_4A", "Sample_4D"), class = "factor"), Var2 = c(24.19, 26.6033333333333, 26.0366666666667, 27.6766666666667, 27.61, 27.5633333333333, 25.1566666666667, 33.7266666666667, 27.7, 26.1466666666667, 25.65, 26.3633333333333, 25.5333333333333, 26.1733333333333)), .Names = c("Sample", "Var2"), row.names = c(NA, -14L), class = "data.frame"), structure(list(Sample = structure(c(1L, 2L, 3L, 4L, 5L, 6L, 7L, 9L, 11L, 12L, 13L, 14L), .Label = c("Sample_1B", "Sample_1C", "Sample_1D", "Sample_2C", "Sample_2A", "Sample_2D", "Sample_3B", "Sample_3C", "Sample_3A", "Sample_3D", "Sample_4B", "Sample_4C", "Sample_4A", "Sample_4D"), class = "factor"), Var3 = c(31.4133333333333, 35.56, 33.9666666666667, 35.66, 32.4633333333333, 31.99, 31.3133333333333, 36.34, 34.9433333333333, 34.5433333333333, 34.3766666666667, 33.28)), .Names = c("Sample", "Var3"), row.names = c(NA, -12L), class = "data.frame"))
Bạn có thể vui lòng cung cấp đầu ra của 'dput (DataList [1: 3])' không? – joran
bản sao có thể có của [R: hợp nhất nhiều dữ liệu.frames] (http://stackoverflow.com/questions/14096814/r-merging-a-lot-of-data-frames) –
có thể trùng lặp của [Hợp nhất nhiều dữ liệu các khung trong danh sách cùng một lúc] (http://stackoverflow.com/questions/8091303/merge-multiple-data-frames-in-a-list-simaneously) –