首页 文章

根据列值强制数据框的列是逻辑的

提问于
浏览
1

我有一个大约200列的数据集 . 在导入时,具有逻辑TRUE,FALSE值的列将强制转换为字符 .

Col1     Col2     Col3      .      .      .
1    "A"      100     "TRUE"
2    "B"      110     "FALSE"
3    "C"      120     "FALSE"
4    "D"      130     "TRUE"
.
.
.

鉴于上面的数据框架示例,似乎我可以使用像 as.logical(df$Col3) 这样的东西来强制它,但这将是高度手动的,通过所有200列将TRUE,FALSE列更改为逻辑 .

是否可以根据列的值有条件地从整个数据框中选择列,并将这些列转换为逻辑数据类型?

1 回答

  • 1

    您可以通过以下方式识别是否应转换每列:

    (to.conv <- sapply(dat, function(x) all(x %in% c("FALSE", "TRUE"))))
    #  Col1  Col2  Col3  Col4 
    # FALSE  TRUE FALSE  TRUE
    

    然后,您可以将相关列转换为逻辑类型:

    dat[,to.conv] <- sapply(dat[,to.conv], as.logical)
    str(dat)
    # 'data.frame': 3 obs. of  4 variables:
    #  $ Col1: chr  "a" "b" "c"
    #  $ Col2: logi  TRUE FALSE TRUE
    #  $ Col3: chr  "a" "b" "c"
    #  $ Col4: logi  TRUE TRUE TRUE
    

    原始数据:

    dat <- data.frame(Col1=c("a", "b", "c"), Col2=c("TRUE", "FALSE", "TRUE"), Col3=c("a", "b", "c"), Col4=c("TRUE", "TRUE", "TRUE"), stringsAsFactors=F)
    str(dat)
    # 'data.frame': 3 obs. of  4 variables:
    #  $ Col1: chr  "a" "b" "c"
    #  $ Col2: chr  "TRUE" "FALSE" "TRUE"
    #  $ Col3: chr  "a" "b" "c"
    #  $ Col4: chr  "TRUE" "TRUE" "TRUE"
    

相关问题