Làm cách nào để lấy các lớp của tất cả các cột trong khung dữ liệu?


85

Cách dễ dàng để tìm ra lớp mỗi cột trong khung dữ liệu là gì?

Câu trả lời:


91

Một tùy chọn là sử dụng lapplyclass. Ví dụ:

> foo <- data.frame(c("a", "b"), c(1, 2))
> names(foo) <- c("SomeFactor", "SomeNumeric")
> lapply(foo, class)
$SomeFactor
[1] "factor"

$SomeNumeric
[1] "numeric"

Một lựa chọn khác là str:

> str(foo)
'data.frame':   2 obs. of  2 variables:
 $ SomeFactor : Factor w/ 2 levels "a","b": 1 2
 $ SomeNumeric: num  1 2

20
Ngoài rasapply(foo, class)
MYaseen208

9
classtrả về một vectơ ký tự của tất cả các lớp mà một đối tượng kế thừa, đầu ra của sapply(foo, class)có thể là một danh sách và không phải lúc nào cũng là một vectơ ký tự như hầu hết mọi người mong đợi. Có thể có một chút nguy hiểm ... Tôi thấy lapplyan toàn hơn rất nhiều.
flodel

1
để dễ đọc hơn, tôi đề nghị: unlist(lapply(foo, class))điều này rất tiện lợi với các khung dữ liệu có nhiều cột.
p130ter

1
unlistvới lapplylà một ý tưởng khủng khiếp vì có thể length(class(x))>1 (xem các nhận xét ở trên) - sapplyan toàn hơn rất nhiều so với unlist + lapply. một cách an toàn sẽ được sapply(lapply(foo, class), "[", 1)- cho rằng foo là một khung dữ liệu
lebatsnok

27

Bạn có thể đơn giản sử dụng lapplyhoặc các sapplychức năng nội trang.

lapplysẽ trả lại cho bạn một list-

lapply(dataframe,class)

trong khi sapplysẽ lấy loại trả lại tốt nhất có thể ex. Vectơ vv -

sapply(dataframe,class)

Cả hai lệnh sẽ trả về cho bạn tất cả các tên cột với lớp tương ứng của chúng.


1

Xin chào đã tìm kiếm giống nhau, và nó cũng có thể

unlist(lapply(mtcars,class))

0

Bạn cũng có thể sử dụng purrr, tương tự như các applychức năng gia đình:

as.data.frame(purrr::map_chr(mtcars, class))
purrr::map_df(mtcars, class)
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.