将所有列从逻辑转换为csv

时间:2018-01-05 05:38:24

标签: r csv class dataframe

我尝试转换在将csv导入字符时显示为逻辑的所有列。

如果我调用每一列,这些代码都会有效,但我有200多列,所以它不可行。

library(stringi)
library(readr)
library(dplyr)

df <- read_csv("~/dataverified.csv", 
col_types = cols(
Innovation = col_character(), 
Tech = col_character(), 
Music = col_character()))

以下是一列摘要()的样本,下面是欲望输出

例如输入摘要

Innovation                                    
Mode:logical
TRUE:403
NA's 45600

例如每列的愿望输出摘要

Innovation
Length: 45900                                    
Class:character
Mode:character

2 个答案:

答案 0 :(得分:1)

阅读完数据集后,我们可以使用包中的14.0\VC\lib函数。 mutate_if可以检查列是否与mutate_if函数一致。如果is.logical,我们可以使用TRUE函数。

as.character

如果您确定所有列都应该是字符,您还可以考虑# Load package library(dplyr) # Create example data frame df <- data_frame(A = as.logical(c(1, 1, 0)), B = as.logical(c(1, 0, 1))) summary(df) # A B # Mode :logical Mode :logical # FALSE:1 FALSE:1 # TRUE :2 TRUE :2 # Convert logical to character df2 <- df %>% mutate_if(is.logical, as.character) summary(df2) # A B # Length:3 Length:3 # Class :character Class :character # Mode :character Mode :character 函数。

mutate_all

答案 1 :(得分:1)

包含45900行和200个逻辑列的数据框:

df <- data.frame(matrix(nrow = 45900, ncol = 200))

确认列是逻辑类型:

lapply(df[1:10], class)

enter image description here

将一些列设为数字以测试方法:

df$X1 <- as.numeric(df$X1)
df$X2 <- as.numeric(df$X2)
df$X7 <- as.numeric(df$X7)

将任何逻辑列转换为字符类型的写入函数:

df_2 <- data.frame(lapply(df, function(x) if(is.logical(x)) { 
     return(as.character(x))
     } else {  
     return(x) 
     }
), stringsAsFactors=FALSE)

验证转化有效:

lapply(df_2[1:10], class)

enter image description here