Khi sử dụng apply
trên một data.frame, đối số được (ngầm) được chuyển đổi thành ký tự. Một ví dụ:Cách tránh chuyển đổi ký tự ngầm khi sử dụng áp dụng trên khung dữ liệu
df <- data.frame(v=1:10, t=1:10)
df <- transform(df, t2 = as.POSIXlt(t, origin = "2013-08-13"))
class(df$t2[1])
## [1] "POSIXct" "POSIXt" (correct)
nhưng:
apply(df, 1, function(y) class(y["t2"]))
## [1] "character" "character" "character" "character" "character" "character"
## [7] "character" "character" "character" "character"
Có cách nào để tránh chuyển đổi này? Hoặc tôi có phải luôn chuyển đổi qua as.POSIXlt(y["t2"])
không?
chỉnh sửa
df của tôi có 2 timestamps (nói, t2 và t3) và một số lĩnh vực khác (ví dụ, v1, v2). Đối với mỗi hàng có t2, tôi muốn tìm k (ví dụ: 3) hàng có t3 gần nhất, nhưng thấp hơn t2 (và cùng v1) và trả lại số liệu thống kê trên v2 từ các hàng này (ví dụ: mức trung bình). Tôi đã viết một hàm f (t2, v1, df) và chỉ muốn áp dụng nó trên tất cả các hàng bằng cách sử dụng apply(df, 1, function(x) f(y["t2"], y["v1"], df)
. Có cách nào tốt hơn để làm những điều như vậy trong R?
Câu trả lời thực sự ở đây là bạn không nên sử dụng 'áp dụng' trên một khung dữ liệu. Bạn đang cố làm gì vậy? – joran
* Chuyển đổi * xảy ra vì 'data.frame' của bạn đang bị ép buộc thành' ma trận'. –
Mỗi lần chỉnh sửa của bạn, bạn thực sự có hai câu hỏi khác nhau (IMO). Tôi muốn nói câu hỏi thứ hai (Chỉnh sửa của bạn) với một tập dữ liệu thích hợp, những gì bạn đã thử và đầu ra mong muốn của bạn. –