我尝试转换在将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
答案 0 :(得分:1)
阅读完数据集后,我们可以使用dplyr包中的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)
将一些列设为数字以测试方法:
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)