簡體   English   中英

在 R 中,如何在具有不同標簽的因子中設置和保留自定義級別?

[英]in R, how to set and retain custom levels in factor with different labels?

在 R 中,如何在具有不同標簽的因子中設置和保留自定義級別?

也就是說,我想在一個因子的級別中設置自定義數字,而這些數值 - 要保留而不是轉換為“1、2、3 等”的整數。

我知道一種解決方案是將這些權重設置為標簽,但隨后我將錯過因子的“標簽”。

不保留因子之間的“加權”距離。 是否有可能在 R 中使用單個變量來實現這樣的目標?

例如:

age_f <- factor( c(1, 10, 100), levels = c( 1, 10, 100 ), labels = c( "baby", "child", "old" ), ordered = T )
 levels(age_f) [1] "baby" "child" "old" labels(age_f) [1] "1" "2" "3" labels(levels(age_f)) [1] "1" "2" "3" as.numeric(age_f) [1] 1 2 3 Desired output: as.numeric(age_f) [1] 1 10 100

如果這在R因子中不存在,那么自定義函數是否容易產生這樣的結果?

您可以為此使用帶labelled包裝。

library(labelled)
labelled(c(1, 10, 100), c(baby = 1, child = 10 , old = 100))

<Labelled double>
[1]   1  10 100

Labels:
 value label
     1  baby
    10 child
   100   old

如果以后想將其轉換為常規因子,可以使用to_factor

我找到了一種解決方法,以便使用我分配給它們的自定義值保留因子的水平:

解決方法是將因子的級別“粘貼”到因子的標簽上,然后使用函數將它們分成兩個不同的 df。

這將等同於從一開始創建兩個不同的數據集/數據框,一個帶有因子標簽,另一個帶有相應的級別。

但是,如果您不想設置“兩次”變量,這可能不太實用。

因此,我相信,它增加了操縱因素的清晰度。 您將所有必要的信息集中在一處。 如果有需要,可以通過創建兩個不同的 dfs 將它們分開。

 # Example Factor: age_f <- factor( ordered( 1:3 ), labels = c( "1 Infant", "10 Child", "100 Old" ) )
# The Function
Leveling_Labels <- function( factors, split_arg = " " ) { 

  leveling_Labels <- list()

  for( i in 1:length( factors ) )  { 

    splits                  <- strsplit( as.character( factors[[i]] ), split_arg )
    leveling_Labels[[i]]    <- as.numeric( unlist( lapply( 1:length( splits ), function(x) splits[[x]][1] ) ) )
    levels( factors[[i]] )  <- unlist( lapply( 1:length( splits ), function(x) splits[[x]][2] ) )

  }

  results <- c( factors, leveling_Labels )
  results

}
  • 制作的因素:

    年齡_f

 [1] 1 Infant 10 Child 100 Old Levels: 1 Infant < 10 Child < 100 Old
  • 運行將因子與其水平分開的函數:

Leveling_Labels( list( age_f ), " ")

 [[1]] [1] Infant Child Old Levels: Infant < Child < Old [[2]] [1] 1 10 100
  • 您可能有一個列表,許多因素

ps 你知道我可以在哪里貢獻這樣的自制 R 函數嗎? 您是否知道對協作開放或在幼稚級別積極尋找貢獻者的軟件包?

暫無
暫無

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

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