Tôi đang cố đếm số cột không chứa NA cho mỗi hàng và đặt giá trị đó vào cột mới cho hàng đó.R: data.table count! NA mỗi hàng
Ví dụ dữ liệu:
library(data.table)
a = c(1,2,3,4,NA)
b = c(6,NA,8,9,10)
c = c(11,12,NA,14,15)
d = data.table(a,b,c)
> d
a b c
1: 1 6 11
2: 2 NA 12
3: 3 8 NA
4: 4 9 14
5: NA 10 15
đầu ra của tôi mong muốn sẽ bao gồm một cột mới num_obs
trong đó có số lượng phi NA mục mỗi dòng:
a b c num_obs
1: 1 6 11 3
2: 2 NA 12 2
3: 3 8 NA 2
4: 4 9 14 3
5: NA 10 15 2
Tôi đã đọc hàng giờ tại và cho đến nay, tốt nhất tôi đã đưa ra là lặp qua các hàng, mà tôi biết là không bao giờ được khuyến khích trong R hoặc data.table. Tôi chắc chắn có một cách tốt hơn để làm điều này, xin vui lòng khai sáng cho tôi.
cách crappy của tôi:
len = (1:NROW(d))
for (n in len) {
d[n, num_obs := length(which(!is.na(d[n])))]
}
Giống như 'd [, num_obs: = sum (! Is.na (.SD)), bởi = 1: nrow (d)] []' hoặc 'd [, num_obs: = rowSums (! Is.na (d))] [] '? (Không chắc chắn sẽ nhanh hơn.) – A5C1D2H2I1M1N2O1R2T1
Có! điều này làm việc. Bạn có thể giải thích nó? Tôi nghĩ .SD sẽ bằng toàn bộ tập dữ liệu nếu tôi sử dụng 'by = 1: nrow (d)'. Làm thế nào nó làm điều này bằng hàng? chỉnh sửa: Ngoài ra, chính xác những gì thêm chuỗi rỗng '[]' làm gì? – Reilstein