"Warning message: Unknown or uninitialised column:df" 将几列转换为数字后
"Warning message: Unknown or uninitialised column:df" after converting a few columns to numeric
我将几列从 "characters" 转换为 "numeric" 后收到此消息:
警告信息:
未知或未初始化 column:df
我需要将一个 csv 文件(来自 Qualtrics)加载到 R 中。
filename <- "/Users/Study1.csv"
library(readr)
df <- read_csv(filename)
第一行包含变量名,但第二行和第三行是一大堆对R 没有用的字符。因此,我需要删除这两行。但是,由于那些无用的字符串块,R 已经将第 18 行识别为字符,因此我需要手动将这些行转换为数字(这对我进行进一步分析是必要的)。
# The 2nd and 3rd rows of the csv file are useless (they are strings)
df <- df[3:nrow(df), ]
# cols 18 to the end are supposed to be numeric, but the 2nd and 3rd rows are string, so R thinks that these columns contain strings
df[ ,18:ncol(df)] <- lapply(df[ ,18:ncol(df)], as.numeric)
在运行以上代码后,弹出错误:
Warning message:
Unknown or uninitialised column: 'df'.
Parsed with column specification:
cols(
.default = col_character()
)
See spec(...) for full column specifications.
NAs introduced by coercionNAs introduced by coercion
NA 很好。但是错误信息很烦人。有没有更好的方法将我的列转换为数字?谢谢大家!
已编辑
谢谢大家的建议。我尝试了 skip
ing 第 2 行和第 3 行的方法。然而,一件奇怪的事情发生了。因为 on cell 包含多行,由空行分隔,R 错误地识别了它。
我把图片里的原文弄模糊了。无论我是否单击“"First Row as Names",它都会发生。你能提出任何修复建议吗?再次感谢大家。
2018-05-30 更新:我已经解决了这个问题。请在下面查看我的回答或访问
您可以在 readr::read_csv
中指定列类型
df <- readr::read_csv(file_name, col_types = "c")
来自 ?readr::read_csv
Alternatively, you can use a compact string representation where each character represents one column: c = character, i = integer, n = number, d = double, l = logical, D = date, T = date time, t = time, ? = guess, or _/- to skip the column.
工作示例
df <- readr::read_csv(" , ,
, ,
idx, key, value
, ,
1, foo, 196
2, bar, 691",
skip = 2,
col_names = TRUE,
col_types = "ncd")
df <- dplyr::slice(df, 2:n())
df
# # A tibble: 2 x 3
# idx key value
# <dbl> <chr> <dbl>
# 1 1 foo 196
# 2 2 bar 691
这假设 header 和数据之间的行数是一致的,如果这可能会发生变化,则需要不同的策略。
感谢大家的建议和意见。我听从了@alistaire 关于使用 skip
.
的建议
根据qualtrics单元格中的newline
,我发现导出数据时可以点击"More options",select "remove line breaks".
根据 的建议,我使用以下代码解决了我的问题。
headers = read.csv(filename, header = F, nrows = 1, as.is = T)
df = read.csv(filename, skip = 3, header = F)
colnames(df)= headers
我将几列从 "characters" 转换为 "numeric" 后收到此消息: 警告信息: 未知或未初始化 column:df
我需要将一个 csv 文件(来自 Qualtrics)加载到 R 中。
filename <- "/Users/Study1.csv"
library(readr)
df <- read_csv(filename)
第一行包含变量名,但第二行和第三行是一大堆对R 没有用的字符。因此,我需要删除这两行。但是,由于那些无用的字符串块,R 已经将第 18 行识别为字符,因此我需要手动将这些行转换为数字(这对我进行进一步分析是必要的)。
# The 2nd and 3rd rows of the csv file are useless (they are strings)
df <- df[3:nrow(df), ]
# cols 18 to the end are supposed to be numeric, but the 2nd and 3rd rows are string, so R thinks that these columns contain strings
df[ ,18:ncol(df)] <- lapply(df[ ,18:ncol(df)], as.numeric)
在运行以上代码后,弹出错误:
Warning message:
Unknown or uninitialised column: 'df'.
Parsed with column specification:
cols(
.default = col_character()
)
See spec(...) for full column specifications.
NAs introduced by coercionNAs introduced by coercion
NA 很好。但是错误信息很烦人。有没有更好的方法将我的列转换为数字?谢谢大家!
已编辑
谢谢大家的建议。我尝试了 skip
ing 第 2 行和第 3 行的方法。然而,一件奇怪的事情发生了。因为 on cell 包含多行,由空行分隔,R 错误地识别了它。
2018-05-30 更新:我已经解决了这个问题。请在下面查看我的回答或访问
您可以在 readr::read_csv
df <- readr::read_csv(file_name, col_types = "c")
来自 ?readr::read_csv
Alternatively, you can use a compact string representation where each character represents one column: c = character, i = integer, n = number, d = double, l = logical, D = date, T = date time, t = time, ? = guess, or _/- to skip the column.
工作示例
df <- readr::read_csv(" , ,
, ,
idx, key, value
, ,
1, foo, 196
2, bar, 691",
skip = 2,
col_names = TRUE,
col_types = "ncd")
df <- dplyr::slice(df, 2:n())
df
# # A tibble: 2 x 3
# idx key value
# <dbl> <chr> <dbl>
# 1 1 foo 196
# 2 2 bar 691
这假设 header 和数据之间的行数是一致的,如果这可能会发生变化,则需要不同的策略。
感谢大家的建议和意见。我听从了@alistaire 关于使用 skip
.
根据qualtrics单元格中的newline
,我发现导出数据时可以点击"More options",select "remove line breaks".
根据
headers = read.csv(filename, header = F, nrows = 1, as.is = T)
df = read.csv(filename, skip = 3, header = F)
colnames(df)= headers