如何从矩阵、向量等中删除因子? [复制]
Posted
技术标签:
【中文标题】如何从矩阵、向量等中删除因子? [复制]【英文标题】:How do you remove factors from a matrix, vector, etc.? [duplicate] 【发布时间】:2013-08-03 00:37:50 【问题描述】:我在不喜欢它们的代码中注入了自己的因素。
如何从矩阵中删除所有因子?一个向量?一个data.frame?
下面的问题更新
我认为这个问题足够笼统,但显然不是。
使用melt
时会出现一些因素,因此我正在寻找一种在执行完melt 命令后删除这些因素的方法。正如您从下面的示例代码中看到的那样,因子方法(不确定如何称呼它)为第 3 列输入。我认为这是因为此列是文本。我需要删除这个因子,因为我正在从矩阵中检索数据,所以因子 3 是没有意义的(在这种情况下)。
names(airquality) <- tolower(names(airquality))
data <- melt(airquality, id=c("month", "day"))
is.factor(data[,3])
【问题讨论】:
矩阵不能包含因子。您可以设置options(stringsAsFactors=FALSE)
以防止发生自动强制,但这可能会导致其他人的代码出现问题,因为他们可能依赖它。
哎呀!显然我需要学会以某种方式接受因素!我希望通过这个项目的结束来避免,但也许我不能!现在正在做一些搜索,但如果你们都有任何好的资源,我会在这里找到我能找到的!
这是重复的; Marek 的 Answer 将为您工作:i <- sapply(data, is.factor); data[i] <- lapply(data[i], as.character)
我刚刚查了一下,Marek 的回答确实有效。
我不知道你为什么不想要因素。我知道他们有疣,但大多数时候他们是看不见的。对于需要字符输入的函数,它们(通常)被无形地转换为字符,并且它们与数据帧中的其他类型的数据愉快地共存。大多数情况下,当一个因素弄乱了您的数据时,这是因为您无意中强制转换了一个矩阵,即使您的因素只是一个字符变量,事情也会变得一团糟。
【参考方案1】:
如果您想将特定数据框转换为无因子,我会在这里参考:Convert data.frame columns from factors to characters
dataframe 被命名为 bob:
bob <- data.frame(lapply(bob, as.character), stringsAsFactors=FALSE)
另外,如果你想读入一个特定的数据帧并且从一开始就没有任何因素,你可以这样写:
file <- read.table(pathtoFile, stringsAsFactors=F)
【讨论】:
这是“使其可重现”的人会感到沮丧的地方,因为我的问题仅在使用“熔体”后才会出现。我现在正在更新我的问题。 @AaronBrown 可能是 another answer 这个答案链接到的问题会做你想做的事。以上是关于如何从矩阵、向量等中删除因子? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Eigen 从 vector<vector<float>> 创建矩阵? [复制]
如何通过在 Rcpp 或 Armadillo 中将矩阵乘以向量元素来复制 R 的功能?