R 언어의 데이터 구조 및 변환

기사와 코드는 [Github 창고: https://github.com/timerring/dive-into-AI ] 에 보관되어 있거나 공개 계정 [AIShareLab] 도 R 언어 에 응답하여 얻을 수 있습니다 .

모든 데이터 분석의 첫 번째 단계는 원하는 형식의 데이터 세트를 만드는 것입니다. R에서 이 작업은 두 단계로 구성됩니다. 먼저 데이터를 저장할 데이터 구조를 선택한 다음 이 데이터 구조에 데이터를 입력하거나 가져옵니다. 다음은 R에서 데이터를 저장하는 데 사용되는 다양한 데이터 구조에 대해 설명합니다.

R 데이터 구조

  • 대부분의 경우 구조화된 데이터는 많은 행과 열로 구성된 데이터세트입니다. R에서는 이러한 데이터 세트를 데이터 프레임 이라고 합니다 .
  • 데이터 프레임에 대해 배우기 전에 데이터를 저장하는 데 사용되는 일부 데이터 구조( 벡터, 요소, 행렬, 배열 및 목록) 에 대해 알아 보겠습니다 .

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]는 값이 31인 벡터의 5번째 요소를 나타냅니다.

아래 첨자의 벡터는 음수 값을 가질 수 있습니다. 이는 지정된 위치에서 요소를 제거한다는 의미입니다. 예를 들어, 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를 정규화하다

1.2인자

일반적으로 변수는 숫자, 명목 및 순서로 나눌 수 있습니다.

명목변수는 개인의 성별, 혈액형, 인종 등과 같이 순서 관계가 없는 범주형 변수입니다. 순서 형 변수 는 환자의 상태(나쁨, 좋음, 매우 좋음)와 같이 계층적, 순차적 관계를 갖는 범주형 변수입니다 . R에서는 명목변수 와 순서변수를 요인(factor)이라고 합니다.

요소는 데이터가 표시되고 분석되는 방법을 결정하므로 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' 

이 두 매개변수는 값을 할당할 때 일대일로 대응해야 하며 R은 이를 연관시킵니다. 요인변수와 일반 문자변수의 차이점은 레벨 속성을 갖는다는 점이다. 요인의 속성은 함수를 사용하여 볼 수 있습니다 levels( ).

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

요인수준 정렬순서 변경 → 기준그룹 변경

통계 모델에서 R은 요인 변수의 첫 번째 수준을 참조 그룹으로 간주합니다. 참조 그룹을 변경하려면 요인 수준의 배열 순서를 변경해야 하는 경우가 많으며 이는 두 가지 방법으로 달성할 수 있습니다. 첫 번째 방법은 함수 Factor( )에서 매개변수 수준 및 레이블의 순서를 변경하는 것입니다 . 예를 들면 다음과 같습니다.

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

두 번째 방법은 함수를 사용하는 것입니다 relevel( ).

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

주문 요소: 주문 = TRUE

순서가 있는 요소를 나타내려면 매개변수가 매개변수가 지정되어야 합니다. factor ( ) . 예를 들어:

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 곱셈: %*%

행렬 곱셈에서 첫 번째 행렬의 열 개수는 두 번째 행렬의 행 개수와 같아야 하며 연산자는 입니다 %*%.

먼저 두 개의 행렬을 만듭니다.

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 배열

소위 배열(array)은 일반적으로 다차원 배열을 말하는데, 이는 행렬과 유사하지만 차원이 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 목록에 있는 stats 개체의 내용을 보려면 를 입력합니다 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.숫자( ) as.숫자( )
is.문자( ) as.문자( )
is.논리적( ) as.논리적( )
is.인자( ) as.인자( )
is.벡터( ) as.벡터( )
is.matrix( ) as.matrix( )
is.배열( ) as.배열( )
is.data.frame( ) as.data.frame( )
is.list( ) as.목록( )
is.테이블( ) as.테이블( )

로 시작하는 함수는 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

참고: Zhao Jun " R 언어 의료 데이터 분석의 실제 전투 "

추천

출처blog.csdn.net/m0_52316372/article/details/132372102