R言語のデータ構造と変換

記事とコードは [Github ウェアハウス: https://github.com/timerring/dive-into-AI ]にアーカイブされています。または、公開アカウント [AIShareLab] はR 言語に返信することで取得することもできます。

データ分析の最初のステップは、目的の形式でデータセットを作成することです。R では、このタスクは 2 つのステップで構成されます。まず、データを保存するデータ構造を選択し、次にこのデータ構造にデータを入力またはインポートします。以下では、R でデータを保存するために使用されるさまざまなデータ構造について説明します。

R データ構造

  • ほとんどの場合、構造化データは多数の行と多数の列で構成されるデータセットです。R では、このようなデータセットはデータ フレームと呼ばれます。
  • データ フレームについて学ぶ前に、データの保存に使用されるいくつかのデータ構造 (ベクトル、因子、行列、配列、リスト)について理解しましょう

1.1 ベクトル

ベクトルは、数値、文字、および論理データを格納するために使用される 1 次元配列ですスカラーは、要素が 1 つだけあるベクトルと考えることができます。この関数はc( )、次のようなベクトルを作成するために使用できます。

x1 <- c(2, 4, 1, -2, 5)
x2 <- c("one", "two", "three")
x3 <- c(TRUE, FALSE, TRUE, FALSE)

ここで、x1 は数値ベクトル、x2 は文字ベクトル、x3 は論理ベクトルです。各ベクトルのデータ型は一貫している必要があります通常のベクトルを作成したい場合、R は次のような便利な演算と関数を提供します。

x4 <- 1:5     # 等价于x4 <- c(1, 2, 3, 4, 5)
x5 <- seq(from = 2, to = 10, by = 2)  # 等价于x5 <- c(2, 4, 6, 8, 10)
x6 <- rep("a", times = 4)  # 等价于x6 <- c("a", "a", "a", "a")

場合によっては、ベクトルの特定の部分だけを使用したい、つまりベクトルのサブセットを選択したい場合があります。ステップ サイズ 7 の 3 ~ 100 の整数のベクトルがあるとします。5 番目の数値の値は何でしょうか?

x <- seq(from = 3, to = 100, by = 7)
# 显示第5个元素
x[5]
# 显示第4,6,7个元素
x[c(4, 6, 7)]

角括弧「[ ]」内の数字は と呼ばれ下标、ベクトルのインデックス位置を指定します。上記のコマンドでは、x[5] はベクトルの 5 番目の要素を表し、その値は 31 です。

添字のベクトルは負の値をとることができます。これは、指定された位置にある要素を削除することを意味します。たとえば、x の最初の 4 要素を削除するには、次のコードを入力します (コマンド内の括弧に注意してください)。

x[-(1:4)]

R の演算はベクトル化されます。次に例を示します。

weight <- c(68, 72, 57, 90, 65, 52)
height <- c(1.75, 1.80, 1.65, 1.90, 1.72, 1.65)
bmi <- weight / height ^ 2
bmi

上記の bmi を計算するプロセスでは、演算子「^」が循環的に使用されるため、計算結果は依然としてベクトルになります。演算に含まれるベクトルの長さが一致しない場合、R は自動的に計算を完了します。完了ルールは、短いベクトルを循環し、同時に警告メッセージを表示することです。

a <- 1:5
b <- 1:3
a + b
# Warning message in a + b:
# “longer object length is not a multiple of shorter object length”
# 2 4 6 5 7

よく使用される統計関数

関数 説明する
長さ(x) xの要素の数を見つける
平均(x) x の算術平均を求めます
中央値(x) x の中央値を求めます
そこ(x) x の標本分散を求める
sd(x) x の標本標準偏差を見つける
範囲(x) x の範囲距離を求める
分(x) xの最小値を見つける
最大(x) xの最大値を見つける
分位数(x) x の分位数を求めます
合計(x) xのすべての要素の合計を求めます
スケール(x) xを正規化する

1.2倍

一般に、変数は数値、名目、順序に分類できます。

名目変数は、人の性別、血液型、民族など、順序関係を持たないカテゴリ変数です。順序変数は、患者の状態 (悪い、良い、非常に良い) など、階層的かつ連続的な関係を持つカテゴリ変数です。名義変数と順序変数は、R では因子と呼ばれます。

要素は、データの表示方法と分析方法を決定するため、R では非常に重要です。データを保存する場合、因子は整数のベクトルとして保存されることがよくありますfactor( )したがって、データ分析の前に、関数を使用してデータを係数に変換する必要があることがよくあります。

# 先定义了一个变量 sex 表示性别,假设其取值 1 表示男性,2 表示女性。
sex <- c(1, 2, 1, 1, 2, 1, 2)
# 接着用函数 factor( ) 将变量 sex 转换成了因子并存为对象 sex.f,其中参数 levels 表示原变量的分类标签值,参数 labels 表示因子取值的标签。
sex.f <- factor(sex,
                levels = c(1, 2),
                labels = c("Male", "Female"))
sex.f
# ============ 输出 =============
# Male Female Male Male Female Male Female
# **Levels**:
# 'Male''Female' 

値を割り当てるとき、これら 2 つのパラメーターは 1 対 1 に対応する必要があり、R がそれらを関連付けることに注意してください。因子変数と一般的な文字変数の違いは、レベル属性を持つことです。因子のプロパティは、関数を使用して表示できますlevels( )

levels(sex.f)
# 'Male''Female' 

因子水準のソート順を変更 → 参照グループを変更

統計モデルでは、R は因子変数の第 1 レベルを参照グループとみなします。多くの場合、参照グループを変更するには因子水準の配置順序を変更する必要がありますが、これは 2 つの方法で実現できます。1 つ目の方法は、関数 function() 内のパラメーター レベルとラベルの順序を変更することです。次に例を示します。

sex.f1 <- factor(sex, levels = c(2, 1), labels = c("Female", "Male"))
sex.f1
# Male Female Male Male Female Male Female
# **Levels**:
# 'Female' 'Male'

2 番目の方法は、関数を使用することですrelevel( )

sex.f1 <- relevel(sex.f, ref = "Female")
sex.f1
# Male Female Male Male Female Male Female
# **Levels**:
# 'Female' 'Male'

順序係数: 順序 = TRUE

順序付き因数を表すには、関数要因 ( ) でパラメーター順序 = TRUEを指定する必要があります。例えば:

status <- c(1, 2, 2, 3, 1, 2, 2)
status.f <- factor(
  status,
  levels = c(1, 2, 3),
  labels = c("Poor", "Improved", "Excellent"),
  ordered = TRUE
)
status.f
# PoorImprovedImprovedExcellentPoorImprovedImproved

1.3 マトリックス

行列は行と列で構成される 2 次元配列です。行列内の各要素は同じモード (数値、文字、または論理) を持ちます。ほとんどの場合、行列の要素は数値であり、多くの数学的特性と演算方法があり、因子分析、一般化線形モデルなどの統計計算に使用できます。

1.3.1 作成: 行列()

関数はmatrix( )、次のような行列の作成によく使用されます。

M <- matrix(1:6, nrow = 2)
M

R は、ベクトルの長さとパラメータ nrow で設定された行数に基づいて列数を自動的に計算します。パラメータ byrow のデフォルトは FALSE です。つまり、値は列ごとに配置されます。行ごとに配置する必要がある場合は、パラメータ byrow を TRUE に設定するだけです

行列の加算、行列の乗算、行列の反転、行列の転置、正方行列の行列式、正方行列の固有値と固有ベクトルなどの一般的な行列演算を R で実装できます。

1.3.2 乗算: %*%

行列の乗算では、最初の行列の列数は 2 番目の行列の行数と等しい必要があり、その演算子は です%*%

まず 2 つの行列を作成します。

mat1 <- matrix(1:6, nrow = 3)
mat1
mat2 <- matrix(5:10, nrow = 2)
mat2
# 函数dim( )可以得到矩阵的维数,即行数和列数
dim(mat1)
# 32
dim(mat2)
# 23
mat1 %*% mat2

1.3.3 転置: t( )

行列の転置操作は、行列の行と列を交換することです。たとえば、行列 mat1 の転置を求めます。

t(mat1)

1.3.4 行列式と逆行列: det( )、solve( )

正方行列の行列式逆行列を求めるには、それぞれ関数det( )と関数を使用しますsolve( )。次に例を示します。

mat3 <- matrix(1:4, nrow = 2)
det(mat3)
# -2

1.3.5 行と列による合計または平均: rowSums、colSums、rowMeans、ColMeans

例えば:

rowSums(mat1)
colSums(mat1)
rowMeans(mat1)
colMeans(mat1)

1.4 配列

いわゆる配列 (配列) は通常、行列に似ていますが、次元が 2 より大きい多次元配列を指します。配列には特別な次元 (dim) プロパティがあります

次のコマンドは、ベクトルに次元を追加した後に配列を定義します。値の順序に注意してください。

ノートブック上で表示される配列はあまり美しくないので、ノートブックを使用することをお勧めしますprint()次のコードは、配列を表示するときに print() を追加します。

A <- 1:24
dim(A) <- c(3, 4, 2)
# A # notebook 上数组显示不太正常,使用 print() 可以解决
print(A)

上記の配列はarray( )関数を使用して作成し、各次元に名前とラベルを追加することもできます。

dim1 <- c("A1", "A2", "A3")
dim2 <- c("B1", "B2", "B3", "B4")
dim3 <- c("C1", "C2")
print(array(1:24, dim = c(3, 4, 2), dimnames = list(dim1, dim2, dim3)))

1.5 リスト

List (リスト) は、R で最も柔軟で複雑なデータ構造であり、さまざまな種類のオブジェクトで構成できます。たとえば、ベクトル、配列、テーブル、および任意のタイプのオブジェクトを組み合わせることもできます

list1 <- list(a = 1, b = 1:5, c = c("red", "blue", "green"))
list1
# $a
# 1
# $b
# 1 2 3 4 5
# $c
# 'red''blue''green'

リストの作成は、通常のデータ分析では一般的なタスクではありません。多くの関数の戻り値はリストです例えば:

# 为了使结果具有可重复性,我们在该命令前用函数 set.seed( ) 设置了生成随机数的种子。如果不设定种子,每次显示的结果很可能不同。
set.seed(123)
# 用函数 rnorm( ) 从标准正态分布中生成了一个由 10 个数组成的随机样本。
dat <- rnorm(10) 
# 用函数 boxplot( ) 对这个随机样本作**箱线图**,并把结果保存为 bp。
bp <- boxplot(dat)
# 函数 class( ) 用于查看对象的类型,这里 bp 是一个列表。
class(bp)
# 'list'

このリストの内容を確認してください。

$ここでのリスト bp には複数のオブジェクトが含まれています。特定のオブジェクトを表示または使用したい場合は、記号「 」を使用してそれを参照するだけで済みます。たとえば、リスト bp 内のオブジェクト統計の内容を表示するには、「 」と入力しますbp$statsリスト内の他のオブジェクトに興味がある場合は、のドキュメントboxplot.statsに移動してください

1.6 データフレーム

データ フレームは行と列で構成される 2 次元構造であり、行は観測値またはレコードを表し、列は変数または指標を表します。データ フレームは、Excel、SAS、SPSS のデータ セットに似ています。データ フレームは行列に非常によく似ており、サブセット選択などの行列の多くの操作もデータ フレームに適用されます。

行列とは異なり、データ フレーム内の異なる列は、異なるモード (数値、文字など) のデータにすることができます。データフレームは関数 data.frame( ) で作成できます。たとえば、次のコードは 5 つの観測値と 4 つの変数を含むデータ フレームを作成します。

ID <- 1:5
sex <- c("male", "female", "male", "female", "male")
age <- c(25, 34, 38, 28, 52)
pain <- c(1, 3, 2, 2, 3)      
pain.f <- factor(pain, levels = 1:3, labels = c("mild", "medium", "severe"))   
patients <- data.frame(ID, sex, age, pain.f)
patients

$データ フレームは本質的にリストです。データ フレームの変数 (列) を表示または使用するには、シンボルと変数名を使用します。例えば:

patients$age
mean(patients$age)

構造化された医療データセットのほとんどはデータ フレームとして表現されるため、データ フレームは最も一般的に処理されるデータ構造です。

データ型変換: is.、as.

データ分析方法の選択はデータの種類と密接に関係しているため、データ分析を実行する場合、アナリストはデータの種類をよく知っている必要があります。R は、オブジェクトのデータ型を決定するための一連の関数と、あるデータ型を別のデータ型に変換するための関数を提供しますこれらの関数はすべて基本パッケージ ベースに存在し、一般的に使用される関数の一部を以下に示します。

データ型判定・変換機能

判断 変換する
is.numeric( ) as.numeric( )
is.character( ) as.character( )
is.logical( ) as.logical( )
is.factor( ) as.factor( )
is.vector() as.vector( )
is.matrix( ) as.matrix( )
is.array() as.array()
is.data.frame() as.data.frame()
is.list() as.list()
is.table() as.table()

で始まる関数はis.TRUE または FALSE を返し、 でas.始まる関数はオブジェクトを対応する型に変換します。例えば:

x <- c(2, 5, 8)
is.numeric(x)
# TRUE
is.vector(x)
# TRUE
y <- as.character(x)
y
# '2''5''8'
is.numeric(y)
# FALSE
is.character(y)
# TRUE
z <- c(TRUE, FALSE, TRUE, FALSE)
is.logical(z)
# TRUE
as.numeric(z)
# 1 0 1 0

参考:趙軍「R言語医療データ解析の実戦

おすすめ

転載: blog.csdn.net/m0_52316372/article/details/132372102