データフレーム内の各列がどのクラスであるかを確認する簡単な方法は何ですか?
回答:
1つのオプションは使用することですlapply
とclass
。例えば:
> foo <- data.frame(c("a", "b"), c(1, 2))
> names(foo) <- c("SomeFactor", "SomeNumeric")
> lapply(foo, class)
$SomeFactor
[1] "factor"
$SomeNumeric
[1] "numeric"
別のオプションはstr
:
> str(foo)
'data.frame': 2 obs. of 2 variables:
$ SomeFactor : Factor w/ 2 levels "a","b": 1 2
$ SomeNumeric: num 1 2
unlist(lapply(foo, class))
するのは、列の多いデータフレームで便利です。
unlist
withlapply
はひどい考えです。なぜならlength(class(x))>1
(上記のコメントを参照)-sapply
よりもはるかに安全である可能性があるからunlist + lapply
です。安全な方法はされるだろうsapply(lapply(foo, class), "[", 1)
- fooがデータフレームであることを考える
簡単に利用しlapply
たり、sapply
組み込み関数を使用したりできます。
lapply
あなたに返されますlist
-
lapply(dataframe,class)
一方sapply
、可能な限り最良の戻り値の型を取ります。ベクトルなど-
sapply(dataframe,class)
どちらのコマンドも、すべての列名とそれぞれのクラスを返します。
こんにちは、同じものを探していました、そしてそれはまたかもしれません
unlist(lapply(mtcars,class))
を使用した上記の優れた回答よりもコンパクトな出力が必要だったlapply
ので、小さな関数としてラップされた代替案を次に示します。
# Example data
df <-
data.frame(
w = seq.int(10),
x = LETTERS[seq.int(10)],
y = factor(letters[seq.int(10)]),
z = seq(
as.POSIXct('2020-01-01'),
as.POSIXct('2020-10-01'),
length.out = 10
)
)
# Function returning compact column classes
col_classes <- function(df) {
t(as.data.frame(lapply(df, function(x) paste(class(x), collapse = ','))))
}
# Return example data's column classes
col_classes(df)
[,1]
w "integer"
x "character"
y "factor"
z "POSIXct,POSIXt"
class
文字ベクトルを返すため、の出力はリストである可能性があり、ほとんどの人が期待するような文字ベクトルであるとは限りません。これは少し危険かもしれません...私ははるかに安全だと思います。sapply(foo, class)
lapply