read.csv错误,由于没有列名(R)



我试图在r中读取csv文件。问题是我的文件没有列名,除了第一列

使用read.csv()函数会给我read中的'Error '。表:列数多于列名错误因此,我使用reader库中的read_csv()函数。但是,这会创建一个df,其中只有一列包含所有值。(https://i.stack.imgur.com/Och8A.png)我应该怎么做来解决这个问题?

第一次读取数据将使用skip=1(不读取第一行,它似乎只是描述性的)和header=FALSE:

quux <- read.csv("path/to/file.csv", skip = 1, header = FALSE)

我觉得这个格式有点别扭,我们可能想要重塑一下。

quux <- setNames(data.frame(t(quux[,-1])), sub(":$", "", quux[[1]]))
quux
#      LON   LAT   MMM 1984-Nov-01 1974-Nov-05
# V2 151.0 -24.5 27.11       22.28       22.92
# V3 151.5 -24.0 27.46       22.47       22.83
# V4 152.0 -24.0 27.19       22.27       22.64

许多工具更喜欢使用"月"。列名作为单个列,这将从" width "格式为"长"。这很容易用tidyr::pivot_longerreshape2::melt来完成:

dat <- reshape2::melt(quux, c("LON", "LAT", "MMM"), variable.name = "date")
dat
#     LON   LAT   MMM        date value
# 1 151.0 -24.5 27.11 1984-Nov-01 22.28
# 2 151.5 -24.0 27.46 1984-Nov-01 22.47
# 3 152.0 -24.0 27.19 1984-Nov-01 22.27
# 4 151.0 -24.5 27.11 1974-Nov-05 22.92
# 5 151.5 -24.0 27.46 1974-Nov-05 22.83
# 6 152.0 -24.0 27.19 1974-Nov-05 22.64
dat <- tidyr::pivot_longer(quux, -c(LON, LAT, MMM), names_to = "date")

从这里开始,将date列设置为" property "Date-object使其"number-like"用它可以做很多事情。例如,在目前的形式中,排序是不正确的,因为Apr将在Jan之前着陆;其他类似数字的操作包括查找日期范围(可以用字符串完成,但不能用这些字符串)和添加/减去日期(例如,比某个值早7天)。

dat$date <- as.Date(dat$date, format = "%Y-%b-%d")
dat
#     LON   LAT   MMM       date value
# 1 151.0 -24.5 27.11 1984-11-01 22.28
# 2 151.5 -24.0 27.46 1984-11-01 22.47
# 3 152.0 -24.0 27.19 1984-11-01 22.27
# 4 151.0 -24.5 27.11 1974-11-05 22.92
# 5 151.5 -24.0 27.46 1974-11-05 22.83
# 6 152.0 -24.0 27.19 1974-11-05 22.64

样本数据:

quux <- read.csv(skip = 1, header = FALSE, text = '
LON:,151.0,151.5,152.0
LAT:,-24.5,-24.0,-24.0
MMM:,27.11,27.46,27.19
1984-Nov-01,22.28,22.47,22.27
1974-Nov-05,22.92,22.83,22.64
')

最新更新