[英]How to overwrite a factor in R
我有一個數據集:
> k
EVTYPE FATALITIES INJURIES
198704 HEAT 583 0
862634 WIND 158 1150
68670 WIND 116 785
148852 WIND 114 597
355128 HEAT 99 0
67884 WIND 90 1228
46309 WIND 75 270
371112 HEAT 74 135
230927 HEAT 67 0
78567 WIND 57 504
變量如下。 根據joran的第一個答案,未使用的級別可以通過droplevels
,因此不必擔心898級,我展示的示例性k
是從k <- d1[1:10, 3:4]
droplevels
k <- d1[1:10, 3:4]
獲得的完整數據集其中d1
是原始數據集。
> str(k)
'data.frame': 10 obs. of 3 variables:
$ EVTYPE : Factor w/ 898 levels " HIGH SURF ADVISORY",..: 243 NA NA NA 243 NA NA 243 243 NA
$ FATALITIES: num 583 158 116 114 99 90 75 74 67 57
$ INJURIES : num 0 1150 785 597 0 ...
我正在嘗試覆蓋WIND
因素:
> k[k$EVTYPE==factor("WIND"), ]$EVTYPE <- factor("AFDAF")
> k[k$EVTYPE=="WIND", ]$EVTYPE <- factor("AFDAF")
但是這兩個命令都給我錯誤消息: level sets of factors are different
或invalid factor level, NA generated
。
我應該怎么做?
嘗試以下方法:
k <- droplevels(d1[1:10, 3:5])
因子(根據文檔)僅僅是整數代碼的向量,然后是每個代碼的標簽的向量。 這些被稱為“級別”。 級別是一個屬性,即使進行子設置,也將與您的數據保持一致。
這是一個功能 ,因為對於許多統計程序而言,跟蹤變量可能具有的所有可能值(即使它們未出現在實際數據中)至關重要。
有人發現這種刺激並使用options(stringsAsFactors = FALSE)
運行R。
要簡單地更改級別,您可以執行以下操作:
d <- read.table(text = " EVTYPE FATALITIES INJURIES
198704 HEAT 583 0
862634 WIND 158 1150
68670 WIND 116 785
148852 WIND 114 597
355128 HEAT 99 0
67884 WIND 90 1228
46309 WIND 75 270
371112 HEAT 74 135
230927 HEAT 67 0
78567 WIND 57 504",header = TRUE,sep = "",stringsAsFactors = TRUE)
> str(d)
'data.frame': 10 obs. of 3 variables:
$ EVTYPE : Factor w/ 2 levels "HEAT","WIND": 1 2 2 2 1 2 2 1 1 2
$ FATALITIES: int 583 158 116 114 99 90 75 74 67 57
$ INJURIES : int 0 1150 785 597 0 1228 270 135 0 504
> levels(d$EVTYPE) <- c('A','B')
> str(d)
'data.frame': 10 obs. of 3 variables:
$ EVTYPE : Factor w/ 2 levels "A","B": 1 2 2 2 1 2 2 1 1 2
$ FATALITIES: int 583 158 116 114 99 90 75 74 67 57
$ INJURIES : int 0 1150 785 597 0 1228 270 135 0 504
或只更改一個:
levels(d$EVTYPE)[2] <- 'C'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.