I have a '나' 값 데이터 프레임을 및 일부 열을 있다.
이러한 '나' 값 제로는 복귀시킴 어떻게 합니까?
보러 주석에 @gsk3 대답. 단순한 예:
> m <- matrix(sample(c(NA, 1:10), 100, replace = TRUE), 10)
> d <- as.data.frame(m)
V1 V2 V3 V4 V5 V6 V7 V8 V9 V10
1 4 3 NA 3 7 6 6 10 6 5
2 9 8 9 5 10 NA 2 1 7 2
3 1 1 6 3 6 NA 1 4 1 6
4 NA 4 NA 7 10 2 NA 4 1 8
5 1 2 4 NA 2 6 2 6 7 4
6 NA 3 NA NA 10 2 1 10 8 4
7 4 4 9 10 9 8 9 4 10 NA
8 5 8 3 2 1 4 5 9 4 7
9 3 9 10 1 9 9 10 5 3 3
10 4 2 2 5 NA 9 7 2 5 5
> d[is.na(d)] <- 0
> d
V1 V2 V3 V4 V5 V6 V7 V8 V9 V10
1 4 3 0 3 7 6 6 10 6 5
2 9 8 9 5 10 0 2 1 7 2
3 1 1 6 3 6 0 1 4 1 6
4 0 4 0 7 10 2 0 4 1 8
5 1 2 4 0 2 6 2 6 7 4
6 0 3 0 0 10 2 1 10 8 4
7 4 4 9 10 9 8 9 4 10 0
8 5 8 3 2 1 4 5 9 4 7
9 3 9 10 1 9 9 10 5 3 3
10 4 2 2 5 0 9 7 2 5 5
'패키지' 노름 살펴보도록 할 수도 있습니다. 이 회사는 좋은 기능을 많이 부족한 데이터 분석. =)
하이브리드 드프리르 옵션을 이제 보다 약 30% 를 기본 R 서브셋 재할당. 100m 에서 'mutate_all 다테프라임 데이터 포인트 (~ 복귀시킴 (., is.na (.), 0))' 는 두 번째 보다 반단면 기본 R 영업사원이에요 [is.na (d)] < - 0 '디바이스입니다. 구체적으로 어떤 것을 피하기 위해 '1' () '' () 또는 메인보드로부터 ifelse 세페우스 사용하고 있습니다. (전체 600 실행했음 4.5 시간 이상으로 인해 이러한 방식은 주로 평가판의 분석 등.) 분석 결과 완료하십시오 벤치마트 대해서는 아래를 참조하시기 바랍니다. 어려움을 겪고 있다 ',' 가장 빠른 경우 대규모 다테프럼스 데이타스터블 옵션을 모두: 표준 기본 r을 외곽진입 40% 더 빠릅니다. 또한 있는 데이터를 효과적으로 사용할 수 있도록 수정되므로 배치하십시오 거의 두 배나 많은 데이터를 동시에.
# Base R:
baseR.sbst.rssgn <- function(x) { x[is.na(x)] <- 0; x }
baseR.replace <- function(x) { replace(x, is.na(x), 0) }
baseR.for <- function(x) { for(j in 1:ncol(x))
x[[j]][is.na(x[[j]])] = 0 }
# tidyverse
## dplyr
dplyr_if_else <- function(x) { mutate_all(x, ~if_else(is.na(.), 0, .)) }
dplyr_coalesce <- function(x) { mutate_all(x, ~coalesce(., 0)) }
## tidyr
tidyr_replace_na <- function(x) { replace_na(x, as.list(setNames(rep(0, 10), as.list(c(paste0("var", 1:10)))))) }
## hybrid
hybrd.ifelse <- function(x) { mutate_all(x, ~ifelse(is.na(.), 0, .)) }
hybrd.replace_na <- function(x) { mutate_all(x, ~replace_na(., 0)) }
hybrd.replace <- function(x) { mutate_all(x, ~replace(., is.na(.), 0)) }
hybrd.rplc_at.idx<- function(x) { mutate_at(x, c(1:10), ~replace(., is.na(.), 0)) }
hybrd.rplc_at.nse<- function(x) { mutate_at(x, vars(var1:var10), ~replace(., is.na(.), 0)) }
hybrd.rplc_at.stw<- function(x) { mutate_at(x, vars(starts_with("var")), ~replace(., is.na(.), 0)) }
hybrd.rplc_at.ctn<- function(x) { mutate_at(x, vars(contains("var")), ~replace(., is.na(.), 0)) }
hybrd.rplc_at.mtc<- function(x) { mutate_at(x, vars(matches("\\d+")), ~replace(., is.na(.), 0)) }
hybrd.rplc_if <- function(x) { mutate_if(x, is.numeric, ~replace(., is.na(.), 0)) }
# data.table
library(data.table)
DT.for.set.nms <- function(x) { for (j in names(x))
set(x,which(is.na(x[[j]])),j,0) }
DT.for.set.sqln <- function(x) { for (j in seq_len(ncol(x)))
set(x,which(is.na(x[[j]])),j,0) }
DT.fnafill <- function(x) { fnafill(df, fill=0)}
DT.setnafill <- function(x) { setnafill(df, fill=0)}
library(microbenchmark)
# 20% NA filled dataframe of 10 Million rows and 10 columns
set.seed(42) # to recreate the exact dataframe
dfN <- as.data.frame(matrix(sample(c(NA, as.numeric(1:4)), 1e7*10, replace = TRUE),
dimnames = list(NULL, paste0("var", 1:10)),
ncol = 10))
# Running 600 trials with each replacement method
# (the functions are excecuted locally - so that the original dataframe remains unmodified in all cases)
perf_results <- microbenchmark(
hybrid.ifelse = hybrid.ifelse(copy(dfN)),
dplyr_if_else = dplyr_if_else(copy(dfN)),
hybrd.replace_na = hybrd.replace_na(copy(dfN)),
baseR.sbst.rssgn = baseR.sbst.rssgn(copy(dfN)),
baseR.replace = baseR.replace(copy(dfN)),
dplyr_coalesce = dplyr_coalesce(copy(dfN)),
tidyr_replace_na = tidyr_replace_na(copy(dfN)),
hybrd.replace = hybrd.replace(copy(dfN)),
hybrd.rplc_at.ctn= hybrd.rplc_at.ctn(copy(dfN)),
hybrd.rplc_at.nse= hybrd.rplc_at.nse(copy(dfN)),
baseR.for = baseR.for(copy(dfN)),
hybrd.rplc_at.idx= hybrd.rplc_at.idx(copy(dfN)),
DT.for.set.nms = DT.for.set.nms(copy(dfN)),
DT.for.set.sqln = DT.for.set.sqln(copy(dfN)),
times = 600L
)
>. >. 보기인쇄 (perf_results) >. 단위: 밀리초입니다 >. uq 맥스야 네발 짓궂군요 마드얀의 식 분 lq >. 이브라d.2펠세 6171.0439 6339.7046 6425.221 6407.397 6496. 992 7052.851 600 >. dplyr_if_else 3737.4954 3877.0983 3953.857 3946.024 4023. 301 4539.428 600 >. hybrd.replace_na 1497.8653 1706.1119 1748.464 1745.282 1789. 804 2127.166 600 >. 바제리스프스테드라시니 1480.5098 1686.1581 1730.006 1728.477 1772. 951 2010.215 600 >. 바저드레프리스 1457.4016 1681.5583 1725.481 1722.069 1766. 916 2089.627 600 >. dplyr_coalesce 1227.6150 1483.3520 1524.245 1519.454 1561. 488 1996.859 600 >. tidyr_replace_na 1248.3292 1473.1707 1521.889 1520.108 1570. 382 1995.768 600 >. 하이베르그레프리스 913.1865 1197.3133 1233.336 1238.747 1276. 141 1438.646 600 >. hybrd.rplc_at.ctn 916.9339 1192.9885 1224.733 1227.628 1268. 644 1466.085 600 >. hybrd.rplc_at.nse 919.0270 1191.0541 1228.749 1228.635 1275. 103 2882.040 600 >. 배서스퍼 869.3169 1180.8311 1216.958 1224.407 1264. 737 1459.726 600 >. hybrd.rplc_at.idx 839.8915 1189.7465 1223.326 1228.329 1266. 375 1565.794 600 >. 트리포리세스 마스 761.6086 915.8166 1015.457 1001.772 1106. 315 1363.044 600 >. 트리포리스트리스크라인 787.3535 918.8733 1017.812 1002.042 1122. 474 1321.860 600
ggplot(perf_results, aes(x=expr, y=time/10^9)) +
geom_boxplot() +
xlab('Expression') +
ylab('Elapsed Time (Seconds)') +
scale_y_continuous(breaks = seq(0,7,1)) +
coord_flip()
qplot(y=time/10^9, data=perf_results, colour=expr) +
labs(y = "log10 Scaled Elapsed Time per Trial (secs)", x = "Trial Number") +
coord_cartesian(ylim = c(0.75, 7.5)) +
scale_y_log10(breaks=c(0.75, 0.875, 1, 1.25, 1.5, 1.75, seq(2, 7.5)))
'변형' 와 '에 대한 추가 참조용이므로 _at' 와 '변형' '요약하십시오 _all' 기능은 여기서 찾을 수 있습니다. https://rdrr.io/cran/dplyr/man/summarise_all.html 또한 모음 I found 도움됐네 시연 및 참조용이므로 있습니다. https://blog.exploratory.io/dplyr-0-5-is-awesome-heres-why-be095fd4eb8a
With special 덕분이다.
단일 벡터입니다:
x <- c(1,2,NA,4,5)
x[is.na(x)] <- 0
'위' 를 만들어 함수은 다다드프라임 빼냅니다 관심용 적용하십시오 이를 열.
예를 들어 다음 시간으로 재현 가능한 제공하십시오 자세한 위치:
https://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example
드프리르 예:
library(dplyr)
df1 <- df1 %>%
mutate(myCol1 = if_else(is.na(myCol1), 0, myCol1))
드프리르 '을 (를)', '기능을 쉽게 통합할 수 있는' 가속 시 가용 0.5.0 사용할 수 있습니다 ',' %> 수행여 파이프라인간의 % '가속 시 가용 (vec, 0)'. 이 모든 NAs 를 대체하는 'vec' 을 (를) 0:
우리는 함께 데이터 프레임을 말하도다 'NA 의:
library(dplyr)
df <- data.frame(v = c(1, 2, 3, NA, 5, 6, 8))
df
# v
# 1 1
# 2 2
# 3 3
# 4 NA
# 5 5
# 6 6
# 7 8
df %>% mutate(v = coalesce(v, 0))
# v
# 1 1
# 2 2
# 3 3
# 4 0
# 5 5
# 6 6
# 7 8
더 일반적인 외곽진입 호환표에 굈 '나' 에서 ' () 또는 벡터를 사용하여 대체하십시오' 을 '0'
예를 들면 다음과 같습니다.
> x <- c(1,2,NA,NA,1,1)
> x1 <- replace(x,is.na(x),0)
> x1
[1] 1 2 0 0 1 1
이 역시 '대안' () '을 사용하여 세페우스 드프리르'
df = data.frame(col = c(1,2,NA,NA,1,1))
df <- df %>%
mutate(col = replace(col,is.na(col),0))
Nas 를 교체할 경우 com/go/4e6b330a_kr 팩터에서의 이 유용할 수 있습니다.
10 797 {{{000}}}
한 정보기술 (it) 로 변환 및 다른 숫자 숫자 벡터입니다 팩터에서의 벡터입니다 자도으로 인공 단위로레벨에서 원하는거요 다음 다시 한 번 더 팩터에서의 벡터입니다 팩터에서의 변형된 " na-level"; 선택할 수 있습니다.
> m <- matrix(sample(c(NA, 1:10), 100, replace = TRUE), 10)
> d <- as.data.frame(m)
> d
V1 V2 V3 V4 V5 V6 V7 V8 V9 V10
1 4 8 1 9 6 9 NA 8 9 8
2 8 3 6 8 2 1 NA NA 6 3
3 6 6 3 NA 2 NA NA 5 7 7
4 10 6 1 1 7 9 1 10 3 10
5 10 6 7 10 10 3 2 5 4 6
6 2 4 1 5 7 NA NA 8 4 4
7 7 2 3 1 4 10 NA 8 7 7
8 9 5 8 10 5 3 5 8 3 2
9 9 1 8 7 6 5 NA NA 6 7
10 6 10 8 7 1 1 2 2 5 7
> d %>% mutate_each( funs_( interp( ~replace(., is.na(.),0) ) ) )
V1 V2 V3 V4 V5 V6 V7 V8 V9 V10
1 4 8 1 9 6 9 0 8 9 8
2 8 3 6 8 2 1 0 0 6 3
3 6 6 3 0 2 0 0 5 7 7
4 10 6 1 1 7 9 1 10 3 10
5 10 6 7 10 10 3 2 5 4 6
6 2 4 1 5 7 0 0 8 4 4
7 7 2 3 1 4 10 0 8 7 7
8 9 5 8 10 5 3 5 8 3 2
9 9 1 8 7 6 5 0 0 6 7
10 6 10 8 7 1 1 2 2 5 7
'다른' 드프리르 옵션과 함께 사용할 수 있는 '방법' '' 티디르 파이프 호환적 replace_na 여러 열:
require(dplyr)
require(tidyr)
m <- matrix(sample(c(NA, 1:10), 100, replace = TRUE), 10)
d <- as.data.frame(m)
myList <- setNames(lapply(vector("list", ncol(d)), function(x) x <- 0), names(d))
df <- d %>% replace_na(myList)
예를 들어, 숫자 제한 쉽게 열 수 있습니다.
d$str <- c("string", NA)
myList <- myList[sapply(d, is.numeric)]
df <- d %>% replace_na(myList)
이를 위해 전용 함수 ('' / '나필 세나필') 는 최근 '데이타스터블' 버전 "'r 린스탈라자팍카주 (,, " data.table" 레포스 = ", https://Rdatatable.gitlab.io/data.table".) 라이브러리 (데이타스터블) ans_df = 나필 (df, 칠 = 0)
"'