Tôi đã đọc trong một tệp dữ liệu lớn thành R sử dụng lệnh sauSố Unique Obs bởi biến trong một bảng dữ liệu
data <- as.data.set(spss.system.file(paste(path, file, sep = '/')))
Các bộ dữ liệu chứa các cột mà không phải thuộc về, và chỉ chứa khoảng trống. Vấn đề này phải làm với R tạo biến mới dựa trên các nhãn biến gắn liền với tệp SPSS (Source).
Rất tiếc, tôi không thể xác định các tùy chọn cần thiết để giải quyết sự cố. Tôi đã thử tất cả: nước ngoài :: read.spss, memisc: spss.system.file, và Hemisc :: spss.get, không có may mắn.
Thay vào đó, tôi muốn đọc trong toàn bộ tập dữ liệu (có cột ma) và xóa các biến không cần thiết theo cách thủ công. Vì các cột ma chỉ chứa các khoảng trắng, nên tôi muốn xóa bất kỳ biến nào từ data.table của tôi, nơi số lượng các quan sát duy nhất bằng một.
Dữ liệu của tôi lớn, do đó chúng được lưu trữ ở định dạng data.table. Tôi muốn xác định một cách dễ dàng để kiểm tra số quan sát duy nhất trong mỗi cột và thả các cột chỉ chứa một quan sát duy nhất.
require(data.table)
### Create a data.table
dt <- data.table(a = 1:10,
b = letters[1:10],
c = rep(1, times = 10))
### Create a comparable data.frame
df <- data.frame(dt)
### Expected result
unique(dt$a)
### Expected result
length(unique(dt$a))
Tuy nhiên, tôi muốn tính số lượng người theo dõi cho tệp dữ liệu lớn, do đó, không nên tham chiếu từng cột theo tên. Tôi không phải là fan của eval (parse()).
### I want to determine the number of unique obs in
# each variable, for a large list of vars
lapply(names(df), function(x) {
length(unique(df[, x]))
})
### Unexpected result
length(unique(dt[, 'a', with = F])) # Returns 1
Dường như với tôi vấn đề là
dt[, 'a', with = F]
trả về một đối tượng của lớp "data.table". Nó có ý nghĩa rằng độ dài của đối tượng này là 1, vì nó là một data.table chứa 1 biến. Chúng tôi biết rằng data.frames thực sự chỉ là danh sách các biến và vì vậy trong trường hợp này độ dài của danh sách chỉ là 1.
Đây là mã giả để tôi giải quyết giải pháp, sử dụng cách data.frame:
for (x in names(data)) {
unique.obs <- length(unique(data[, x]))
if (unique.obs == 1) {
data[, x] <- NULL
}
}
Bất kỳ thông tin chi tiết nào về cách tôi có thể yêu cầu số lượng quan sát một cách hiệu quả hơn theo cột trong data.table sẽ được đánh giá cao. Ngoài ra, nếu bạn có thể giới thiệu cách thả các quan sát nếu chỉ có một quan sát duy nhất trong một data.table sẽ tốt hơn.
1 Như tôi đã nói, tôi có cảm giác rằng tôi có thể đơn giản hóa cách tiếp cận của tôi ... nhưng tôi sẽ không đưa ra giải pháp của bạn. Chết tiệt, đây là gọn gàng ... –