簡體   English   中英

如何用NA重新編碼變量?

[英]How to recode variables with NA?

我想在以下數據框中重新編程變量D2D3

    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。

  1. 如果D1 = "Yes"並且D2NA ,則D3應該保持NA
  2. 如果D1 = "NEVER" ,則D2始終為NAD3應該為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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM