强制列表对象键入 double
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
如果您想要一个新对象,您可以使用 lapply
和 replace
。
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")
这个问题已被问过很多次,但建议的解决方案不知何故对我不起作用。
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
如果您想要一个新对象,您可以使用 lapply
和 replace
。
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")