반응형
데이터 프레임에서 문자 값을 NA로 바꾸기
문자 값(예: 임의의 장소에서)을 포함하는 데이터 프레임이 있습니다."foo"
)으로 대체하고 싶은 것은NA
.
전체 데이터 프레임에서 이를 수행하는 가장 좋은 방법은 무엇입니까?
다음 내용:
df[df == "foo"] <- NA
처음부터 데이터를 읽을 때 해당 문자를 NA로 변환하는 것이 이 문제를 해결하는 한 가지 방법입니다.
df <- read.csv("file.csv", na.strings = c("foo", "bar"))
사용.dplyr::na_if
, 특정 값을 대체할 수 있습니다.NA
. 이 경우에는, 그것은"foo"
.
library(dplyr)
set.seed(1234)
df <- data.frame(
id = 1:6,
x = sample(c("a", "b", "foo"), 6, replace = T),
y = sample(c("c", "d", "foo"), 6, replace = T),
z = sample(c("e", "f", "foo"), 6, replace = T),
stringsAsFactors = F
)
df
#> id x y z
#> 1 1 a c e
#> 2 2 b c foo
#> 3 3 b d e
#> 4 4 b d foo
#> 5 5 foo foo e
#> 6 6 b d e
na_if(df$x, "foo")
#> [1] "a" "b" "b" "b" NA "b"
여러 열에 대해 이 작업을 수행해야 할 경우 다음을 통과할 수 있습니다."foo"
…을 통하여mutate
와 함께across
(updated 대상dplyr
v1.0.0+).
df %>%
mutate(across(c(x, y, z), na_if, "foo"))
#> id x y z
#> 1 1 a c e
#> 2 2 b c <NA>
#> 3 3 b d e
#> 4 4 b d <NA>
#> 5 5 <NA> <NA> e
#> 6 6 b d e
또 다른 옵션은is.na<-
:
is.na(df) <- df == "foo"
사용법이 약간 직관에 어긋날 수도 있지만 실제로는 다음을 할당합니다. NA
에의 가치.df
오른쪽에 있는 색인을 찾습니다.
이 일은 다음과 같이 할 수 있습니다.dplyr::mutate_all()
그리고.replace
:
library(dplyr)
df <- data_frame(a = c('foo', 2, 3), b = c(1, 'foo', 3), c = c(1,2,'foobar'), d = c(1, 2, 3))
> df
# A tibble: 3 x 4
a b c d
<chr> <chr> <chr> <dbl>
1 foo 1 1 1
2 2 foo 2 2
3 3 3 foobar 3
df <- mutate_all(df, funs(replace(., .=='foo', NA)))
> df
# A tibble: 3 x 4
a b c d
<chr> <chr> <chr> <dbl>
1 <NA> 1 1 1
2 2 <NA> 2 2
3 3 3 foobar 3
다른dplyr
옵션은 다음과 같습니다.
df <- na_if(df, 'foo')
열 이름을 모르거나 선택할 열 수가 많다고 가정하면,is.character()
쓸모가 있을지도 모릅니다.
df <- data.frame(
id = 1:6,
x = sample(c("a", "b", "foo"), 6, replace = T),
y = sample(c("c", "d", "foo"), 6, replace = T),
z = sample(c("e", "f", "foo"), 6, replace = T),
stringsAsFactors = F
)
df
# id x y z
# 1 1 b d e
# 2 2 a foo foo
# 3 3 a d foo
# 4 4 b foo foo
# 5 5 foo foo e
# 6 6 foo foo f
df %>%
mutate_if(is.character, list(~na_if(., "foo")))
# id x y z
# 1 1 b d e
# 2 2 a <NA> <NA>
# 3 3 a d <NA>
# 4 4 b <NA> <NA>
# 5 5 <NA> <NA> e
# 6 6 <NA> <NA> f
한 가지 해결 방법은 다음과 같습니다.
for (i in 1:ncol(DF)){
DF[which(DF[,i]==""),columnIndex]<-"ALL"
FinalData[which(is.na(FinalData[,columnIndex])),columnIndex]<-"ALL"
}
언급URL : https://stackoverflow.com/questions/3357743/replacing-character-values-with-na-in-a-data-frame
반응형
'source' 카테고리의 다른 글
크롬에서 작동하지 않는 로컬 파일 시스템에 대한 AJAX 요청? (0) | 2023.10.21 |
---|---|
pandas - df.index를 float64에서 유니코드 또는 문자열로 변경 (0) | 2023.10.21 |
구속조건 배치에서 배리어와 가이드라인의 차이점은 무엇입니까? (0) | 2023.10.21 |
'http-server'가 내부 또는 외부 명령으로 인식되지 않습니다. (0) | 2023.10.21 |
컨테이너에서 배경 이미지를 회전하는 방법은 무엇입니까? (0) | 2023.10.21 |