簡體   English   中英

以與從 0 到唯一值長度的因子相同的順序將因子轉換為數字

[英]Convert factor to numeric in the same order of the factor from 0 to length of the unique values

我能夠將new_target列轉換為數字形式。 但由於因子形式已經是數字,我只剩下一堆數字。 我希望他們訂購並重新分配到從 0 到因子長度的等價物。 一開始我有一個數字目標,然后我將它量化為 20 個 bin。 結果,我獲得了由唯一值(0,1,3,14,16,18,19)組成的new_target列。 我需要從 0 到new_target中唯一值長度的值,而不是這些唯一值。 這是c(0,1,2,3,4,5,6) 預期的 output 在new_target_expected列中給出。 如何在不手動創建的情況下創建new_target_expected列? 我有一個更大的 dataframe 我正在處理,無法手動執行此操作。

require(stringr)
require(data.table)

cat_var <- c("rock", "indie", "rock", "rock", "pop", "indie", "pop", "rock", "pop")
cat_var_2 <- c("blue", "green", "red", "red", "blue", "red", "green", "blue", "green")
target_var <- c(30, 10, 27, 14, 29, 25, 27, 12, 10)
df <- data.table("categorical_variable" = cat_var, "categorical_variable_2" = cat_var_2, "target_variable" =  target_var)

targetVariable <- "target_variable"

number_of_buckets = 20
# Each bucket should contain equal number of objects
a <- cut(df[[targetVariable]] , breaks = number_of_buckets, labels = 0:(number_of_buckets - 1)) 

df[["new_target"]] <- a
df[["new_target"]] <- as.numeric(as.character(df[["new_target"]]))
df[["new_target_expected"]] <- c(6, 0, 4, 2, 5, 3, 4, 1, 0)

我們可以使用droplevels刪除未使用的levels並將該factor強制為integer R中的索引從 1 開始,所以減 1 使值從 0 開始。

library(data.table)
df[, (targetVariable) := as.integer(droplevels(a))-1]

-輸出

> df
   categorical_variable categorical_variable_2 target_variable
1:                 rock                   blue               6
2:                indie                  green               0
3:                 rock                    red               4
4:                 rock                    red               2
5:                  pop                   blue               5
6:                indie                    red               3
7:                  pop                  green               4
8:                 rock                   blue               1
9:                  pop                  green               0

暫無
暫無

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

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