簡體   English   中英

因子水平虛擬變量R

[英]Factor levels dummy variable R

我不確定從列表中創建因子時是否應該包含水平:

random_merge_patients$MedCond <-factor(sort(random_merge_patients[[35]]))

因素示例如下所示:

[6589] "wt loss  ftt arthritis anemia of chronic disease mild cognitive impairment  hx gout  dehydration prednisone therapy long term med use"

如果應該選擇級別,我會選擇什么? 任何人都可以澄清一下,因為這使我感到困惑。

我將使用此變量創建一個虛擬變量,但是即使我沒有收到錯誤消息, $Dementia中的所有值也都是0,但是有些應該是1:

random_merge_patients$'MedCond_Dementia'<-ifelse(random_merge_patients$'MedCond' == "dementia",1,0)

關於R中的因素,可能會有一些混淆。它們是以一種形式表示非數值的方法,該形式允許傳統的統計模型將其用作輸入(例如線性建模)。 要素具有一組固定的“級別”(對於計算機),每個級別都有一個“標簽”(對於人類)。 但是,R不會直覺應該為標簽提取字符串的哪些方面。

考慮一下這種小情況。

x = c("wt loss ftt arthritis anemia of chronic disease",
      "sleep loss ftt dementia",
      "wt loss ftt arthritis anemia of chronic disease",
      "wt loss ftt demntia")

f = factor(x)
f
#> [1] wt loss ftt arthritis anemia of chronic disease sleep loss ftt dementia
#> [3] [3] wt loss ftt arthritis anemia of chronic disease wt loss ftt demntia
#> 3 Levels: sleep loss ftt dementia ... wt loss ftt demntia

我們的原始向量長度為​​4,包含3個唯一的字符串。 當我們將其轉換為因子時,R會自動創建級別並將標簽按字母順序分配給這些級別(因此,您的sort無關緊要)。 請注意, x的第一個值如何以“ wt loss”開頭,而第一個級別如何以sleep開頭。 R創建了3個級別,因為有3個唯一值,並且接受了原始字符串作為標簽。 至此,我們的因子向量實際上只是一個整數向量,可以將標簽映射到這些整數上。

as.numeric(f)
#> [1] 2 1 2 3

再次注意水平(數字部分)是如何按字母順序創建的。 因此,采用字符串並將其轉換為因數可以幫助R自動為線性模型創建虛擬變量,但是如果您想設計自己的功能(例如,創建“痴呆症”列),則不會帶來任何額外的好處。

對於這種情況下的特征工程,最好不要去看正則表達式。 例如,如果我想創建一個編碼為減肥的矢量,我可以這樣做:

wt.loss = grepl("w[^ ]*t loss",x)
wt.loss
#> [1]  TRUE FALSE  TRUE  TRUE
  • grepl是邏輯grep(其中grep是搜索功能),因此它將返回TRUE / FALSE
  • "w[^ ]*t loss"搜索的子字符串看起來像“ w(任何重復0次或多次的非空格字符)t損失”,因此它將匹配“ wt損失”或“體重減輕”。
  • x指定要搜索的向量。

您可以針對想要設計的許多功能執行此操作。 搜索痴呆症將是grepl("dementia",x) 如果有多個術語實質上都表示同一件事,則可以使用| 標記一個或一個條件(例如grepl("osteoperosis|calcium loss in bones",x) )。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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