"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 很好。但是错误信息很烦人。有没有更好的方法将我的列转换为数字?谢谢大家!

已编辑 谢谢大家的建议。我尝试了 skiping 第 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