我的数据集大约有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列更改为逻辑。
是否可以根据列的值有条件地从整个数据框中选择列,并将这些列转换为逻辑数据类型?
答案 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"