删除R中因子变量的引号

删除R中因子变量的引号,r,dataframe,R,Dataframe,我的数据框中有500多个因子列,其中许多仅为“真”/“假”。有没有办法一次删除这些列的引号 示例代码-- 上面的代码似乎不起作用。任何线索感谢 如果您给出一个更好的示例(有些列需要转换,有些列不需要转换),我很乐意进行测试。根据您的描述,我认为这将起作用: data = lapply(data, FUN = function(x) { if (is.factor(x) & all(toupper(levels(x)) %in% c("TRUE", "FALSE"))) {

我的数据框中有500多个因子列,其中许多仅为“真”/“假”。有没有办法一次删除这些列的引号

示例代码--


上面的代码似乎不起作用。任何线索感谢

如果您给出一个更好的示例(有些列需要转换,有些列不需要转换),我很乐意进行测试。根据您的描述,我认为这将起作用:

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])