簡體   English   中英

R數據幀的所有列(因子)列都轉換為十進制

[英]R data frame all columns (factor) columns to decimal

它的問題很簡單,但看起來似乎不存在於stackoverflow中

我有一個數據框,其中所有列都是要轉換為小數的因子。

  Var1 Var2 Var3 Var4
1 0.76 0.84 0.76 0.73
2 0.76 0.84 0.76 0.73
3 0.76 0.84 0.76 0.73
4 0.76 0.84 0.76 0.73
5 0.76 0.84 0.76 0.73
6 0.76 0.84 0.76 0.73

我想在不損失小數位的情況下進行轉換。

df <- sapply(df, as.numeric)

這不保留小數。

如果它們確實是因素,則需要執行另一步驟:

as.numeric無法直接工作的原因是因為每個因素在內部as.numericlevels存儲。 您可以通過levels(factor_var) 因此,當您直接將as.numeric應用於因子時,返回的是它們的levels 因此,首先使其成為一個字符,然后將其應用為as.numeric

df <- sapply(df, as.character)
df <- sapply(df, as.numeric)

或者您可以將它們嵌套在一個函數中:

convert_func<-function(x){  as.numeric(as.character(x))}

然后: df <- sapply(df, convert_func)

我從未嘗試過在沒有功能的情況下將它們嵌套在apply / lapply / sapply中,但是它也可能起作用。 或者你可以做一個循環:

for (col in 1:ncol(df){ 
     df[col]<-as.numeric(as.character(df[col]))
     }

這也應該起作用:

df[] <- lapply(df, function(x) ifelse(is.numeric(x), as.numeric(x), x))

我們可以使用dplyrfactor列轉換為numeric

library(dplyr)
library(magrittr)
df %<>%
   mutate_if(is.factor, funs(as.numeric(as.character(.))))

使用base R ,我們可以做

df[] <- lapply(df, function(x) if(is.factor(x)) as.numeric(as.character(x)) else x)

數據

df <- structure(list(Var1 = structure(c(1L, 1L, 1L, 1L, 1L, 1L), 
.Label = "0.76", class = "factor"), 
Var2 = structure(c(1L, 1L, 1L, 1L, 1L, 1L), .Label = "0.84", class = "factor"), 
Var3 = structure(c(1L, 1L, 1L, 1L, 1L, 1L), .Label = "0.76", class = "factor"), 
Var4 = structure(c(1L, 1L, 1L, 1L, 1L, 1L), .Label = "0.73", class = "factor")),
 .Names = c("Var1", "Var2", "Var3", "Var4"), row.names = c("1", "2", "3", "4", "5", 
"6"), class = "data.frame")

暫無
暫無

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

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