[英]How to recode variables with NA?
我想在以下數據框中重新編程變量D2
至D3
D1 D2 D3
[1] Yes 0-15 MINUTES 7.5
[2] Yes 15-30 MINUTES 22.5
[3] Yes 30-60 MINUTES 45
[4] Yes NA NA
[5] NEVER NA 0
基本上,它將D2
轉換為其數值中點。 但是, D2
可以為NA。
D1 = "Yes"
並且D2
為NA
,則D3
應該保持NA
D1 = "NEVER"
,則D2
始終為NA
, D3
應該為0
。 這是我的嘗試:
library(plyr)
data$D3 <- revalue(data$D2, c(
"0-15 MINUTES" = "7.5",
"15-30 MINUTES" = "22.5",
"30-60 MINUTES" = "45")) //this part works perfectly fine
但是,由於D1
為"NEVER"
而試圖將NA
轉換為0
,遇到以下錯誤:
data$D3 [data$D1 == "NEVER"] <- 0
Warning message:
In `[<-.factor`(`*tmp*`, data$D1 == "NEVER", value = c(2L, 2L, 3L, :
invalid factor level, NA generated
x%>%extract(D2,c("y","n"),"(\\d+)-(\\d+)")%>%
mutate(D3=(as.numeric(y)+as.numeric(n))/2)
D1 y n D3
1 Yes 0 15 7.5
2 Yes 15 30 22.5
3 Yes 30 60 45.0
4 Yes <NA> <NA> NA
5 NEVER <NA> <NA> NA
這個怎么樣:
df=tibble(D1=c("YES","YES","YES","YES","NEVER"),D2=c("0-15 MINUTES","15-30 MINUTES","30- 60 MINUTES",NA,NA))
y=df$D2%>%str_replace("MINUTES","")%>%str_split("-")%>%unlist%>%na.omit%>%as.numeric%>%rollapply(FUN=mean,width=2,by=2)
df$D3=NA
df$D3[!is.na(df$D2)]=y
df$D3[is.na(df$D2)&df$D1=="NEVER"]=0
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.