2016-01-12 72 views
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分多種列改變真,僞列的邏輯。

是否可以根據列的值有條件地從整個數據框中選擇列,然後將這些列轉換爲邏輯數據類型?

回答

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" 
相關問題