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

时间:2016-01-12 01:01:19

标签: r

我的数据集大约有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 个答案:

答案 0 :(得分: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"