删除R中因子变量的引号
我的数据框中有500多个因子列,其中许多仅为“真”/“假”。有没有办法一次删除这些列的引号 示例代码--删除R中因子变量的引号,r,dataframe,R,Dataframe,我的数据框中有500多个因子列,其中许多仅为“真”/“假”。有没有办法一次删除这些列的引号 示例代码-- 上面的代码似乎不起作用。任何线索感谢 如果您给出一个更好的示例(有些列需要转换,有些列不需要转换),我很乐意进行测试。根据您的描述,我认为这将起作用: data = lapply(data, FUN = function(x) { if (is.factor(x) & all(toupper(levels(x)) %in% c("TRUE", "FALSE"))) {
上面的代码似乎不起作用。任何线索感谢 如果您给出一个更好的示例(有些列需要转换,有些列不需要转换),我很乐意进行测试。根据您的描述,我认为这将起作用:
data = lapply(data, FUN = function(x) {
if (is.factor(x) & all(toupper(levels(x)) %in% c("TRUE", "FALSE"))) {
return(as.logical(x))
}
return(x)
})
它测试列是否是一个因子,其级别是否可以强制为TRUE和FALSE,如果是,则将其转换为逻辑,如果否,则返回未更改的列。我认为这是您想要的,假设您所讨论的列有两个级别-“FALSE”和“TRUE” 输出:
a b c
1 true FALSE TRUE
2 false TRUE FALSE
as.logical()
函数已在其他答案/注释中提出,但未产生预期输出:
df2 = lapply(df, FUN = function(x) {
if (identical(ftlev,toupper(levels(x)))) {
x = as.logical(x)
}
return(x)
})
as.data.frame(df2)
输出:
a b c
1 NA NA TRUE
2 NA NA FALSE
这就解决了您的问题:
> as.logical(c("true", "false", "True", "TRUE", "False"))
[1] TRUE FALSE TRUE TRUE FALSE
我也很惊讶
编辑:我刚注意到你的代码,我想你可以用一个完整的例子
您的数据位于data.frame(基本上是列列表)中。如果愿意,这类似于电子表格
执行dataframe[1,]
提取数据集的第一行。我想您想要的是使用dataframe[,1]
获取第一列。此列是一个向量,很好操作,无需将其放入列表中
所以你会这样做:
as.logical(dataframe[,1])
但这只会返回您想要的数据,而不会修改数据帧!因此,您希望将此结果分配给第一列:
dataframe[,1] <- as.logical(dataframe[,1])
dataframe[,1]我认为您可以使用as.logical()
确实有一个factor方法,但我想删除那些具有“true”/“false”的factor列的引号,而不是其他列的引号。我必须将此数据帧转换为JSON…从JSON中删除引号更容易吗?然后您需要扩展问题,以包含某种示例。如果您想要列,请尝试data[columns],比如说,1、2和5,您将执行data[c(1、2、5)]
感谢@pcantqlupo的响应。但是当我做str(df2)时,我仍然看到对真/假的引号——3$a:chr[1:2]“真”“假”$b:chr[1:2]“假”“真”$c:Factor w/2级“假”、“真”:21@outlier123您总是会在字符数据周围看到引号。例如,运行以下命令:str(data.frame(a=c(“a”,“b”)))
并将其与您遇到的问题进行比较:str(data.frame(a=c(“\”TRUE\”,“\”FALSE\”))
我认为没有任何迹象表明OPs数据实际上在字符串中有引号,就像在您的测试数据中一样。非常有效!谢谢谢谢你的详细回复。正如.logical()为我做的那样:)
as.logical(dataframe[,1])
dataframe[,1] <- as.logical(dataframe[,1])