R에서 `replace()` 및 `is.na()`를 사용하여 값을 바꾸는 방법


소개

데이터 분석에서 데이터 세트에 있는 누락된 값, 음수 값 또는 정확하지 않은 값을 처리해야 할 수 있습니다. 이러한 문제는 값을 0, NA 또는 평균으로 대체하여 해결할 수 있습니다.

이 기사에서는 R에서 replace()is.na() 함수를 사용하는 방법을 살펴봅니다.

전제 조건

이 자습서를 완료하려면 다음이 필요합니다.

  • R은 로컬 또는 서버에 설치됩니다.

벡터의 값을 replace()로 바꾸기

이 섹션에서는 벡터의 값을 대체하는 방법을 보여줍니다.

R 구문의 replace() 함수에는 벡터, 인덱스 벡터 및 대체 값이 포함됩니다.

replace(target, index, replacement)

먼저 벡터를 만듭니다.

df <- c('apple', 'orange', 'grape', 'banana')
df

이렇게 하면 apple, orange, 포도바나나가 포함된 벡터가 생성됩니다.

Output
"apple" "orange" "grape" "banana"

이제 목록의 두 번째 항목을 바꾸겠습니다.

dy <- replace(df, 2, 'blueberry')
dy

이렇게 하면 orangeblueberry로 대체됩니다.

Output
"apple" "blueberry" "grape" "banana"

이제 목록의 네 번째 항목을 대체합니다.

dx <- replace(dy, 4, 'cranberry')
dx

이렇게 하면 바나나크랜베리로 대체됩니다.

Output
"apple" "blueberry" "grape" "cranberry"

R에서 NA 값을 0으로 바꾸기

측정값을 포함하는 데이터 프레임이 있는 시나리오를 고려하십시오.

    Ozone  Solar.R  Wind  Temp  Month  Day
1      41      190   7.4    67      5    1
2      36      118   8.0    72      5    2
3      12      149  12.6    74      5    3
4      18      313  11.5    62      5    4
5      NA       NA  14.3    56      5    5
6      28       NA  14.9    66      5    6
7      23      299   8.6    65      5    7
8      19       99  13.8    59      5    8
9       8       19  20.1    61      5    9
10     NA      194   8.6    69      5   10
11      7       NA   6.9    74      5   11
12     16      256   9.7    69      5   12

다음은 CSV 형식의 데이터입니다.

Ozone,Solar.R,Wind,Temp,Month,Day
41,190,7.4,67,5,1
36,118,8.0,72,5,2
12,149,12.6,74,5,3
18,313,11.5,62,5,4
NA,NA,14.3,56,5,5
28,NA,14.9,66,5,6
23,299,8.6,65,5,7
19,99,13.8,59,5,8
8,19,20.1,61,5,9
NA,194,8.6,69,5,10
7,NA,6.9,74,5,11
16,256,9.7,69,5,12

여기에는 데이터가 누락된 상황에 대해 "사용할 수 없음\에 대한 문자열 NA가 포함됩니다.

NA 값을 0으로 바꿀 수 있습니다.

먼저 데이터 프레임을 정의합니다.

df <- read.csv('air_quality.csv')

is.na()를 사용하여 값이 NA인지 확인합니다. 그런 다음 NA 값을 0으로 바꿉니다.

df[is.na(df)] <- 0
df

이제 데이터 프레임은 다음과 같습니다.

Output
Ozone Solar.R Wind Temp Month Day 1 41 190 7.4 67 5 1 2 36 118 8.0 72 5 2 3 12 149 12.6 74 5 3 4 18 313 11.5 62 5 4 5 0 0 14.3 56 5 5 6 28 0 14.9 66 5 6 7 23 299 8.6 65 5 7 8 19 99 13.8 59 5 8 9 8 19 20.1 61 5 9 10 0 194 8.6 69 5 10 11 7 0 6.9 74 5 11 12 16 256 9.7 69 5 12

데이터 프레임에서 NA가 모두 교체되었습니다.

NA 값을 R 값의 평균으로 바꾸기

데이터 분석 과정에서 NA 값을 평균값으로 대체하여 정확도를 높이는 경우가 많습니다. mean() 함수는 평균값을 계산합니다.

이 상황을 극복하기 위해 NA 값을 나머지 값의 평균으로 대체합니다. 이 방법은 데이터 손실 없이 우수한 정확도를 생성하는 데 중요한 것으로 입증되었습니다.

NA 값이 있는 다음 입력 데이터 세트를 고려하십시오.

    Ozone  Solar.R  Wind  Temp  Month  Day
1      41      190   7.4    67      5    1
2      36      118   8.0    72      5    2
3      12      149  12.6    74      5    3
4      18      313  11.5    62      5    4
5      NA       NA  14.3    56      5    5
6      28       NA  14.9    66      5    6
7      23      299   8.6    65      5    7
8      19       99  13.8    59      5    8
9       8       19  20.1    61      5    9
10     NA      194   8.6    69      5   10
11      7       NA   6.9    74      5   11
12     16      256   9.7    69      5   12
df <- read.csv('air_quality.csv')

is.na()mean()을 사용하여 NA를 대체합니다.

df$Ozone[is.na(df$Ozone)] <- mean(df$Ozone, na.rm = TRUE)

먼저 이 코드는 Ozone 열에서 NA의 모든 항목을 찾습니다. 다음으로 na.rm 인수가 있는 NA 값을 제외하고 Ozone 열에 있는 모든 값의 평균을 계산합니다. 그런 다음 NA의 각 인스턴스는 계산된 평균으로 대체됩니다.

그런 다음 값을 정수로 round()합니다.

df$Ozone <- round(df$Ozone, digits = 0)

이제 데이터 프레임은 다음과 같습니다.

Output
Ozone Solar.R Wind Temp Month Day 1 41 190 7.4 67 5 1 2 36 118 8.0 72 5 2 3 12 149 12.6 74 5 3 4 18 313 11.5 62 5 4 5 21 NA 14.3 56 5 5 6 28 NA 14.9 66 5 6 7 23 299 8.6 65 5 7 8 19 99 13.8 59 5 8 9 8 19 20.1 61 5 9 10 21 194 8.6 69 5 10 11 7 NA 6.9 74 5 11 12 16 256 9.7 69 5 12

Ozone 열의 NA 값은 이제 Ozone 열(21 열 값의 반올림 평균으로 대체됩니다. >).

R에서 음수 값을 0 또는 NA로 바꾸기

데이터 분석 과정에서 데이터 프레임의 음수 값을 0 또는 NA로 바꾸고 싶을 때가 있습니다. 이것은 결과의 부정적인 경향을 피하기 위해 필요합니다. 데이터 세트에 있는 음수 값은 분석을 오도하고 잘못된 정확도를 생성합니다.

음수 값이 있는 다음 입력 데이터 세트를 고려하십시오.

    count  entry1  entry2  entry3
 1      1     345    -234     345
 2      2      65     654     867
 3      3      23     345    3456
 4      4      87     876       9
 5      5    2345      34     867
 6      6     876      98      76
 7      7      35    -456     123
 8      8      87      98     345
 9      9    -765      67     765
10     10    4567     -87     234

다음은 CSV 형식의 데이터입니다.

count,entry1,entry2,entry3
1,345,-234,345
2,65,654,867
3,23,345,3456
4,87,867,9
5,2345,34,867
6,876,98,76
7,35,-456,123
8,87,98,345
9,-765,67,765
10,4567,-87,234

CSV 파일을 읽습니다.

df <- read.csv('negative_values.csv')

음수 값을 0으로 바꾸기

replace()를 사용하여 entry2 열의 음수 값을 0으로 변경합니다.

data_zero <- df
data_zero$entry2 <- replace(df$entry2, df$entry2 < 0, 0) 
data_zero

이제 데이터 프레임은 다음과 같습니다.

Output
count entry1 entry2 entry3 1 1 345 0 345 2 2 65 654 867 3 3 23 345 3456 4 4 87 867 9 5 5 2345 34 867 6 6 876 98 76 7 7 35 0 123 8 8 87 98 345 9 9 -765 67 765 10 10 4567 0 234

entry2 열의 음수 값이 0으로 대체되었습니다.

음수 값을 NA로 바꾸기

replace()를 사용하여 entry2 열의 음수 값을 NA로 변경합니다.

data_na <- df
data_na$entry2 <- replace(df$entry2, df$entry2 < 0, NA)
data_na

이제 데이터 프레임은 다음과 같습니다.

Output
count entry1 entry2 entry3 1 1 345 NA 345 2 2 65 654 867 3 3 23 345 3456 4 4 87 867 9 5 5 2345 34 867 6 6 876 98 76 7 7 35 NA 123 8 8 87 98 345 9 9 -765 67 765 10 10 4567 NA 234

entry2 열의 음수 값이 NA로 대체되었습니다.

결론

데이터 프레임의 값을 바꾸는 것은 데이터 분석을 위해 R에서 사용할 수 있는 편리한 옵션입니다. R에서 replace()를 사용하면 NA, 0 및 적절한 경우 음수 값을 전환하여 분석을 위해 대규모 데이터 세트를 정리할 수 있습니다.

R에서 sub()gsub()를 사용하는 방법으로 계속 학습하세요.