我有一个类的字符向量,我想应用到一个dataframe中,以便将该dataframe中每个字段的当前类转换为向量中的相应条目。例如:
frame <- data.frame(A = c(2:5), B = c(3:6))
classes <- c("character", "factor")
使用for-循环,我知道可以使用lapply实现这一点。例如:
for(i in 1:2) { frame[i] <- lapply(frame[i], paste("as", classes[i], sep = ".")) }
然而,就我的目的而言,For -循环无法工作。还有什么办法我错过了吗?
预先感谢您的投入!
注意:我被告知这可能是this post的副本。而且,是的,我的问题和它相似。但是我以前看过类()方法。而且,它似乎没有有效地处理将字段转换为因子的问题。另一方面,lapply方法做得很好。但是,不幸的是,我不能在这个实例中使用for-循环。
发布于 2017-02-20 00:48:20
如果您不反对在不使用lapply
循环的情况下使用for
,您可以尝试如下所示。
frame[] <- lapply(seq_along(frame), function(x) {
FUN <- paste("as", classes[x], sep = ".")
match.fun(FUN)(frame[[x]])
})
str(frame)
# 'data.frame': 4 obs. of 2 variables:
# $ A: chr "2" "3" "4" "5"
# $ B: Factor w/ 4 levels "3","4","5","6": 1 2 3 4
但是,更好的选择是在开始读取数据时尝试应用正确的类。
x <- tempfile() # Just to pretend....
write.csv(frame2, x, row.names = FALSE) # ... that we are reading a csv
frame3 <- read.csv(x, colClasses = classes)
str(frame3)
# 'data.frame': 4 obs. of 2 variables:
# $ A: chr "2" "3" "4" "5"
# $ B: Factor w/ 4 levels "3","4","5","6": 1 2 3 4
样本数据:
frame <- frame2 <- data.frame(A = c(2:5), B = c(3:6))
classes <- c("character", "factor")
https://stackoverflow.com/questions/42336377
复制相似问题