簡體   English   中英

如何覆蓋R中的一個因子

[英]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 differentinvalid 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.

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