簡體   English   中英

強制列表 object 輸入雙精度

[英]coerce a list object to type double

這個問題已被問過很多次,但建議的解決方案不知何故對我不起作用。

d <- data.frame(var1 = c("ab","ac", "ad"), var2 = c("1.1","2.6","0"),var3 = c("1","5.4","0"))

ff <- as.numeric(as.character(d[ ,2:3]))
fg <- lapply(d[ ,2:3],as.numeric)
fh <- as.numeric(unlist(d[ ,2:3]))
fi <- as.numeric(d[ ,2:3])

var2 和 var3 被歸類為因子。 我不想重新排列或合並列或單元格。 我只希望它們是數字以便能夠計算。

要將強制應用於多個列的子集, lapply是正確的方法。 這會產生一個列表,您希望將其分配回子集列。

as.numeric.factor <- function(f) as.numeric(levels(f))[f]    
# as.numeric.factor <- function(f) as.numeric(as.character(f))  ## alternatively

d[,2:3] <- lapply(d[,2:3], as.numeric.factor)

str(d)
# 'data.frame': 3 obs. of  3 variables:
# $ var1: chr  "ab" "ac" "ad"
# $ var2: num  1.1 2.6 0
# $ var3: num  1 5.4 0

如果你想要一個新的 object 你可以使用lapplyreplace

fg <- replace(d, 2:3, lapply(d[,2:3], as.numeric.factor))
str(fg)
# 'data.frame': 3 obs. of  3 variables:
# $ var1: chr  "ab" "ac" "ad"
# $ var2: num  1.1 2.6 0
# $ var3: num  1 5.4 0

數據

d <- structure(list(var1 = c("ab", "ac", "ad"), var2 = structure(c(2L, 
3L, 1L), .Label = c("0", "1.1", "2.6"), class = "factor"), var3 = structure(c(2L, 
3L, 1L), .Label = c("0", "1", "5.4"), class = "factor")), row.names = c(NA, 
-3L), class = "data.frame")

暫無
暫無

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

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