![](/img/trans.png)
[英]How to convert all factor variables into numeric variables (in multiple data frames at once)?
[英]How to convert all factor variables into numeric variables in a large data frame without loosing variables labels?
我正在嘗試將大型數據框中的所有因子變量轉換為數值變量。 轉換時,變量標簽(變量的詳細名稱)在新數據框中丟失。 有沒有什么簡單的方法可以在不丟失變量的情況下將因子變量轉換為數據框中的數值變量。 下面給出了示例代碼。 謝謝你。
v1 <- c('1','4','5')
v2 <- c('21000', '23400', '26800')
v3 <- c('2010','2008','2007')
data <- data.frame(v1, v2, v3)
library(Hmisc)
label(data$v1) <- "Number"
label (data$v2) <- "Value"
label (data$v3) <- "Year"
data[] <- as.numeric(factor(as.matrix(data)))
View(data)
您可以預先保存屬性並恢復它們。
## save labels
attr.data <- lapply(dat, attr, "label")
## convert to numeric and restore labels
dat[] <- Map(function(x, y) `attr<-`(as.numeric(levels(x))[x], "label", y), dat, attr.data)
一步:
dat[] <- Map(function(x, y)
`attr<-`(as.numeric(levels(x))[x], "label", y), dat, Map(attr, dat, "label"))
標簽存儲在屬性(try attributes(data)
)中,可以使用attr
及其名稱進行訪問。 標簽屬性的名稱是"label"
,我們可以在轉換過程中捕獲它們。 Map
以相應的方式處理列和屬性,以確保分配正確的標簽。
dat
# v1 v2 v3
# 1 1 21000 2010
# 2 4 23400 2008
# 3 5 26800 2007
str(dat)
# 'data.frame': 3 obs. of 3 variables:
# $ v1: num 1 4 5
# ..- attr(*, "label")= chr "Number"
# $ v2: num 21000 23400 26800
# ..- attr(*, "label")= chr "Value"
# $ v3: num 2010 2008 2007
# ..- attr(*, "label")= chr "Year"
數據
dat <- structure(list(v1 = structure(1:3, .Label = c("1", "4", "5"), class = c("labelled",
"factor"), label = "Number"), v2 = structure(1:3, .Label = c("21000",
"23400", "26800"), class = c("labelled", "factor"), label = "Value"),
v3 = structure(3:1, .Label = c("2007", "2008", "2010"), class = c("labelled",
"factor"), label = "Year")), row.names = c(NA, -3L), class = "data.frame")
旁注:我在這里使用dat
而不是data
,因為data
已經被 R 占用來加載特定的數據集。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.