read_excel(来自 readxl 包)将 1899-12-30 之前的日期读取为 NA,如何解决此问题?

2024-04-06

我有一个包含 130 场足球比赛的数据集,这些比赛的历史可以追溯到 1893 年。

当我从 Excel 导入数据集时,1900 年的日期与 R (RStudio) 中应有的日期相同。但是,1900 年之前的日期以 NA 形式出现。

我该如何解决这个问题,以便所有日期都以正确的格式来自 Excel?

或者,如何用正确的 (18XX-MM-DD) 日期替换 NA?

这是 Excel 中显示的数据:

    Home_Team, Away_Team, SUFC, SWFC, H,  A,  Score, Season, Date

Sheffield United, Sheffield Wednesday, 1, 1, 1, 1, 1–1, 1893/94, 1893-10-16

Sheffield United, Sheffield Wednesday, 1, 0, 1, 0, 1–0, 1894/95, 1895-01-12

Sheffield United, Sheffield Wednesday, 1, 1, 1, 1, 1–1, 1895/96, 1895-12-26

Sheffield United, Sheffield Wednesday, 2, 0, 2, 0, 2–0, 1896/97, 1896-12-26

Sheffield United, Sheffield Wednesday, 1, 1, 1, 1, 1–1, 1897/98, 1897-12-27

Sheffield United, Sheffield Wednesday, 2, 1, 2, 1, 2–1, 1898/99, 1898-12-26

Sheffield United, Sheffield Wednesday, 1, 0, 1, 0, 1–0, 1900/01, 1900-12-15

Sheffield United, Sheffield Wednesday, 3, 0, 3, 0, 3–0, 1901/02, 1902-03-01

Sheffield United, Sheffield Wednesday, 2, 3, 2, 3, 2–3, 1902/03, 1902-09-01

Sheffield United, Sheffield Wednesday, 1, 1, 1, 1, 1–1, 1903/04, 1903-12-12

Sheffield United, Sheffield Wednesday, 4, 2, 4, 2, 4–2, 1904/05, 1905-04-08

Sheffield United, Sheffield Wednesday, 0, 2, 0, 2, 0–2, 1905/06, 1905-10-21

这是我应用到它的 R 代码:

library(tidyverse)
library(readxl)
library(magrittr)
library(dplyr)
library(ggplot2)
library(tidyr)

Sheff_derby_R <- read_excel("sheffield_derby/Sheff_derby_R.xlsx", 
                        col_types = c("text", "text", "text", 
                                      "text", "text", "text", "text", 
                                       "text", 
                                      "date", "text", "numeric", "numeric", 
                                      "numeric", "numeric", "numeric", 
                                      "numeric", "numeric", "numeric", 
                                      "numeric", "numeric", "numeric", 
                                      "numeric", "numeric", "numeric", 
                                      "numeric", "numeric", "numeric", 
                                      "numeric", "numeric", "numeric", 
                                      "numeric", "numeric", "numeric", 
                                      "numeric", "numeric", "numeric", 
                                      "numeric", "numeric", "numeric", 
                                      "numeric", "numeric", "numeric", 
                                      "numeric", "numeric", "numeric", 
                                      "numeric", "numeric", "numeric", 
                                      "numeric", "numeric", "numeric", 
                                      "numeric", "text"))
 View(Sheff_derby_R)

在 R 中,18xx 日期(最后一栏,不是 18xx/xx 季节栏)被 NA 替换。这是头部,前 12 行:

    Home_Team Away_Team SUFC  SWFC  H     A     Score Season Date                
   <chr>     <chr>     <chr> <chr> <chr> <chr> <chr> <chr>  <dttm>              
 1 Sheffiel~ Sheffiel~ 1     1     1     1     1 – 1 1893/~ NA                  
 2 Sheffiel~ Sheffiel~ 1     0     1     0     1 – 0 1894/~ NA                  
 3 Sheffiel~ Sheffiel~ 1     1     1     1     1 – 1 1895/~ NA                  
 4 Sheffiel~ Sheffiel~ 2     0     2     0     2 – 0 1896/~ NA                  
 5 Sheffiel~ Sheffiel~ 1     1     1     1     1 – 1 1897/~ NA                  
 6 Sheffiel~ Sheffiel~ 2     1     2     1     2 – 1 1898/~ NA                  
 7 Sheffiel~ Sheffiel~ 1     0     1     0     1 – 0 1900/~ 1900-12-15 00:00:00 
 8 Sheffiel~ Sheffiel~ 3     0     3     0     3 – 0 1901/~ 1902-03-01 00:00:00 
 9 Sheffiel~ Sheffiel~ 2     3     2     3     2 – 3 1902/~ 1902-09-01 00:00:00 
10 Sheffiel~ Sheffiel~ 1     1     1     1     1 – 1 1903/~ 1903-12-12 00:00:00 
11 Sheffiel~ Sheffiel~ 4     2     4     2     4 – 2 1904/~ 1905-04-08 00:00:00 
12 Sheffiel~ Sheffiel~ 0     2     0     2     0 – 2 1905/~ 1905-10-21 00:00:00 

无论存在什么错误,这里都有一个可能的(临时)解决方法:

首先,读入为"text"看看 R 有点窒息的原因之一。 (我过于简单化了read_excel这里的争论,因为"text"是它的默认值Date在这种情况下。在你的情况下,只需更新"date" to "text"在你的向量中col_types.)

library(readxl)
x <- read_excel("Sheff_derby_SO.xlsx")
x$Date
#  [1] "1893-10-16" "1895-01-12" "1895-12-26" "1896-12-26" "1897-12-27"
#  [6] "1898-12-26" "350"        "791"        "975"        "1442"      
# [11] "1925"      

对于 1900 年及之后的日期,它们将作为整数传递。它们都恰好基于相同的日期来源,因此作为黑客我们可以这样做:

wrong <- !grepl("-", x$Date)
as.Date("1900-01-01") + as.integer(x$Date[wrong]) - 2L
# [1] "1900-12-15" "1902-03-01" "1902-09-01" "1903-12-12" "1905-04-08"

这与 excel 告诉我的相符thinks他们应该是。

注意:我原以为这是一个简单的偏移,但是+ 2L需要使其对齐。这表明可能还有其他事情正在发生,所以please使用您的所有数据(如果这不是全部数据)验证此技巧是否适用于其他值。

在数据集中替换它们就像

sav <- as.Date("1900-01-01") + as.integer(x$Date[wrong]) - 2L
x$Date <- as.Date(x$Date) # 'wrong' ones will be NA
x$Date[wrong] <- sav
x$Date
#  [1] "1893-10-16" "1895-01-12" "1895-12-26" "1896-12-26" "1897-12-27"
#  [6] "1898-12-26" "1900-12-15" "1902-03-01" "1902-09-01" "1903-12-12"
# [11] "1905-04-08"
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

read_excel(来自 readxl 包)将 1899-12-30 之前的日期读取为 NA,如何解决此问题? 的相关文章

  • 在 r 中导出矩阵

    我想在 R 中导出一个矩阵 并保留行和列的名称 当我使用 write table 或 write csv 时 我得到一个带有新列的矩阵 我该如何使用这个功能 感谢您的帮助 您不会获得新列 行名称将保存为文本文件中的第一列 因此 您可以指定在
  • par(mfrow=c(1,2)) 不显示并排密度图[重复]

    这个问题在这里已经有答案了 par mfrow c 1 2 plot 1 12 log y plot 1 2 xaxs i 然而 当我尝试做并排密度图时 图会单独输出 load the stud recs dataset library U
  • 替换列表列表中的元素

    The applyR 中的函数是简化 for 循环以获得输出的好方法 是否有一个等效的函数可以帮助人们在替换向量的值时避免 for 循环 通过示例可以更好地理解这一点 Take this list for example x list li
  • decompose() 的周期太少[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 错误看起来像这样 decompose
  • 从 R 中的向量中选择所有可能的元组

    我正在尝试用 R 编写一个程序 当给定一个向量时 将返回所有可能的tuples http en wikipedia org wiki Tuples该向量中的元素 例如 元组 c a b c c a b c 出租车 c a c c b c c
  • 将 Instagram/youtube 嵌入 Shiny R 应用程序

    我想通过点击图表来播放 Instagram 或 Youtube 视频 例如显示异常值等 到目前为止 明确告诉 Shiny 视频内容是有效的 require shiny require ggplot2 data df lt data fram
  • 如何对同一列上的数据帧列表中的所有数据帧进行排序?

    我有一个数据框列表dataframes list 举个例子 我把dput dataframes list 在底部 我想对列列表中的所有数据框进行排序enrichment 我可以对一个数据框进行排序 first dataframe lt da
  • 计算每个唯一值出现的次数

    假设我有 v rep c 1 2 2 2 25 现在 我想计算每个唯一值出现的次数 unique v 返回唯一值是什么 但不返回它们的数量 gt unique v 1 1 2 我想要一些能给我的东西 length v v 1 1 25 le
  • 重复测量引导统计数据,按多个因素分组

    我有一个看起来像这样的数据框 但显然还有更多行等 df lt data frame id c 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 cond c A A B B A A B B A A B B A A B B co
  • 在 R 中向散点图添加线条

    如何向图表添加线条 我做了以下 dat lt data frame xvar 1 20 rnorm 20 sd 10 yvar 1 20 rnorm 20 sd 10 zvar 1 20 rnorm 20 sd 10 plot dat 1
  • 如何计算R中移动窗口内的平均斜率

    我的数据集包含2个变量y 和 t 05s y 每 05 秒测量一次 我正在尝试计算移动中的平均坡度20秒窗口 即计算第一个 20 秒斜率值后 窗口向前移动一个时间单位 05 秒 并计算下一个 20 秒窗口 在以下位置生成连续 20 秒斜率值
  • 使用 pracma::findpeaks 识别持续峰值

    我的语法有问题peakpat内的选项findpeaks内的函数pramcaR 包 v 2 1 1 我使用的是 R 3 4 3 x64 Windows 我希望该函数能够识别可能有两个重复值的峰值 并且我相信该选项peakpat这就是我能做到的
  • 如何使用 usmap 标记数字而不是名称?

    我知道 usmap 有一个选项label in plot usmap 我想标记一些数字 而不是状态名称 我想 usmap 中应该有与州质心坐标相关的数据 但我不知道如何找到它 如果我能得到 坐标然后我可以用它来标记数字geom text 这
  • 将绘图调用拆分为多个块

    我正在编写一个图的解释 其中我基本上将在第一个块中创建图 然后描述该输出 并在第二个块中添加一个轴 然而 似乎每个块都会强制一个新的绘图环境 因此当我们尝试使用以下命令运行块时会出现错误axis独自的 观察 output html docu
  • kernlab 中 SVM 训练之外的核矩阵计算

    我正在开发一种新算法 该算法可以生成修改后的核矩阵以用于 SVM 训练 但遇到了一个奇怪的问题 出于测试目的 我比较了使用 kernelMatrix 接口和普通内核接口学习的 SVM 模型 例如 Model with kernelMatri
  • 在 R 中绘制 Likert 变量的堆积条形图

    假设我有一个如下所示的数据框 P Q1 Q2 1 1 4 1 2 2 3 4 3 1 1 4 其中的列告诉我哪个人相应地回答了问题 q1 q2 中的哪一个 这些问题需要按照 4 分李克特量表进行回答 例如 批准 表示 1 稍微批准 表示 2
  • 以引用透明的方式从函数的省略号参数中提取符号

    事情又发生了 我正要按下发布答案按钮的问题被删除了 我正在寻找一种方法来从函数的省略号参数中提取绑定到符号的对象的值以及符号 也就是说 我试图以引用透明的方式从省略号中提取符号 我尝试过使用替代品和lazy dots 但没有成功 funct
  • R 中的列乘以子字符串

    假设我有一个数据框 其中包含多个组件及其在多个列中列出的属性 并且我想对这些列运行多个函数 我的方法是尝试将其基于每个列标题中的子字符串 但我无法弄清楚如何做到这一点 下面是数据框的示例 Basket F Type 1 F Qty 1 F
  • 基于时间窗口的不规则时间序列的优化滚动函数

    有没有办法使用 rollapply 来自zoo包或类似的东西 优化功能 rollmean rollmedian等 使用基于时间的窗口计算滚动函数 而不是基于大量观察的函数 我想要的很简单 对于不规则时间序列中的每个元素 我想计算一个具有 N
  • 更改闪亮 R 中的默认浏览器

    我在 RStudio 中使用 01 hello 虽然在 IE 中默认打开程序时它不会显示直方图 但即使在 Chrome 中 滑块也不起作用 我无法滑动条形图并看到直方图中的变化 如何更改 R 中的默认浏览器 以便闪亮启动 Chrome 而不

随机推荐