私はRを使用しており、を使用してデータをデータフレームにロードしましたread.csv()
。データフレームの各列のデータ型をどのように決定しますか?
str(...)
はスケーラブルではなく、<100 colsでスチームが不足します。
私はRを使用しており、を使用してデータをデータフレームにロードしましたread.csv()
。データフレームの各列のデータ型をどのように決定しますか?
str(...)
はスケーラブルではなく、<100 colsでスチームが不足します。
回答:
開始する最善の策は、を使用すること?str()
です。いくつかの例を調べるために、いくつかのデータを作成しましょう:
set.seed(3221) # this makes the example exactly reproducible
my.data <- data.frame(y=rnorm(5),
x1=c(1:5),
x2=c(TRUE, TRUE, FALSE, FALSE, FALSE),
X3=letters[1:5])
@Wilmer E Henao Hのソリューションは非常に合理化されています。
sapply(my.data, class)
y x1 x2 X3
"numeric" "integer" "logical" "factor"
を使用str()
すると、その情報に加えて追加の利点(因子のレベルや各変数の最初のいくつかの値など)が得られます。
str(my.data)
'data.frame': 5 obs. of 4 variables:
$ y : num 1.03 1.599 -0.818 0.872 -2.682
$ x1: int 1 2 3 4 5
$ x2: logi TRUE TRUE FALSE FALSE FALSE
$ X3: Factor w/ 5 levels "a","b","c","d",..: 1 2 3 4 5
@Gavin Simpsonのアプローチも合理化されていますが、以下とは少し異なる情報を提供しますclass()
。
sapply(my.data, typeof)
y x1 x2 X3
"double" "integer" "logical" "integer"
詳細についてはclass
、typeof
、そして真ん中の子、mode
この優れたSOスレッドを参照してください。R.「モード」と「typeof演算」「クラス」とで物事の種類の包括的な調査が不十分です。
str(dataframe)
一目でカラムのタイプを判別する最も速い方法であることがわかりました。他のアプローチは、より多くのキーストロークを必要とし、それほど多くの情報を表示しませんが、列のデータ型が他の関数への入力である場合に役立ちます。
apply()
ですか?それは行列のためです。データフレームは(特別な種類の)リストです。
sapply(yourdataframe, class)
yourdataframeは、使用しているデータフレームの名前です。
私は提案します
sapply(foo, typeof)
データフレーム内のベクトルの実際のタイプが必要な場合。class()
多少異なる獣です。
この情報をベクトルとして取得する必要がない場合(つまり、後でプログラムで何かを行うために必要ない場合)は、を使用しますstr(foo)
。
どちらの場合もfoo
、データフレームの名前に置き換えられます。
小さなデータフレームの場合:
library(tidyverse)
as_tibble(mtcars)
データ型を使用してdfを印刷できます
# A tibble: 32 x 11
mpg cyl disp hp drat wt qsec vs am gear carb
* <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 21 6 160 110 3.9 2.62 16.5 0 1 4 4
2 21 6 160 110 3.9 2.88 17.0 0 1 4 4
3 22.8 4 108 93 3.85 2.32 18.6 1 1 4 1
大きなデータフレームの場合:
glimpse(mtcars)
データ型の構造化されたビューを提供します。
Observations: 32
Variables: 11
$ mpg <dbl> 21.0, 21.0, 22.8, 21.4, 18.7, 18.1, 14.3, 24.4, 22.8, 19.2, 17.8, 16.4, 17....
$ cyl <dbl> 6, 6, 4, 6, 8, 6, 8, 4, 4, 6, 6, 8, 8, 8, 8, 8, 8, 4, 4, 4, 4, 8, 8, 8, 8, ...
$ disp <dbl> 160.0, 160.0, 108.0, 258.0, 360.0, 225.0, 360.0, 146.7, 140.8, 167.6, 167.6...
$ hp <dbl> 110, 110, 93, 110, 175, 105, 245, 62, 95, 123, 123, 180, 180, 180, 205, 215...
$ drat <dbl> 3.90, 3.90, 3.85, 3.08, 3.15, 2.76, 3.21, 3.69, 3.92, 3.92, 3.92, 3.07, 3.0...
$ wt <dbl> 2.620, 2.875, 2.320, 3.215, 3.440, 3.460, 3.570, 3.190, 3.150, 3.440, 3.440...
$ qsec <dbl> 16.46, 17.02, 18.61, 19.44, 17.02, 20.22, 15.84, 20.00, 22.90, 18.30, 18.90...
$ vs <dbl> 0, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, ...
$ am <dbl> 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, ...
$ gear <dbl> 4, 4, 4, 3, 3, 3, 3, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 4, 4, 4, 3, 3, 3, 3, 3, ...
$ carb <dbl> 4, 4, 1, 1, 2, 1, 4, 2, 2, 4, 4, 3, 3, 3, 4, 4, 4, 1, 2, 1, 1, 2, 2, 4, 2, ...
列のデータ型のリストを取得するには(上記の@Alexandreで述べたとおり):
map(mtcars, class)
データ型のリストを示します:
$mpg
[1] "numeric"
$cyl
[1] "numeric"
$disp
[1] "numeric"
$hp
[1] "numeric"
列のデータ型を変更するには:
library(hablar)
mtcars %>%
convert(chr(mpg, am),
int(carb))
列mpg
とam
文字を変換し、列carb
を整数に変換します。
# A tibble: 32 x 11
mpg cyl disp hp drat wt qsec vs am gear carb
<chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <chr> <dbl> <int>
1 21 6 160 110 3.9 2.62 16.5 0 1 4 4
2 21 6 160 110 3.9 2.88 17.0 0 1 4 4
3 22.8 4 108 93 3.85 2.32 18.6 1 1 4 1
4 21.4 6 258 110 3.08 3.22 19.4 1 0 3 1
それは明確に述べられていなかったので、私はこれを追加します:
すべてのデータ型の出現回数を保持するテーブルを作成する方法を探していました。
我々が持っていると言うdata.frame
2つの数値と1つの論理列で
dta <- data.frame(a = c(1,2,3),
b = c(4,5,6),
c = c(TRUE, FALSE, TRUE))
あなたはそれで各データ型の列の数を要約することができます
table(unlist(lapply(dta, class)))
# logical numeric
# 1 2
これは、多くの列があり、簡単に概要を知りたい場合に非常に便利です。
謝辞:このソリューションは@Cyberneticの回答に触発されました。
以下は、データフレーム内のさまざまなデータタイプすべてのリストと、そのタイプに関連付けられた特定の変数名を返すhelpRFunctionsパッケージの一部である関数です。
install.package('devtools') # Only needed if you dont have this installed.
library(devtools)
install_github('adam-m-mcelhinney/helpRFunctions')
library(helpRFunctions)
my.data <- data.frame(y=rnorm(5),
x1=c(1:5),
x2=c(TRUE, TRUE, FALSE, FALSE, FALSE),
X3=letters[1:5])
t <- list.df.var.types(my.data)
t$factor
t$integer
t$logical
t$numeric
その後、次のようなことができvar(my.data[t$numeric])
ます。
これがお役に立てば幸いです!
lapply(your_data, class)
、これには書式設定のための追加の処理が少し必要であることです。
csvファイルを(マトリックスではなく)data.frameとしてインポートする場合は、 summary.default
summary.default(mtcars)
Length Class Mode
mpg 32 -none- numeric
cyl 32 -none- numeric
disp 32 -none- numeric
hp 32 -none- numeric
drat 32 -none- numeric
wt 32 -none- numeric
qsec 32 -none- numeric
vs 32 -none- numeric
am 32 -none- numeric
gear 32 -none- numeric
carb 32 -none- numeric
sapply(..., class))
または対話的に(例えばstr(...)
)、またはその両方?それは、あなたが自由にでき、プログラム的にそれを行うには、一般的に、よりスケーラブルだFilter(...)
整数、文字、要因などのためのリストをするか、使用することができますgrep/grepl
から、列の型を推測するためにnames(...)
、彼らは任意の命名規則に従っている場合