【问题标题】:Assign column names to select columns of dataset分配列名以选择数据集的列
【发布时间】:2020-03-19 19:17:30
【问题描述】:

我导入了一个,其中从#5 开始的列是需要清理的日期,因为它们的格式为X1.10.20,我希望格式为YYYY-MM-DD。我正在使用gsub() 将数据清理为 的可识别形式,然后使用mdy() 进行转换

library(tidyverse)
library(lubridate)

df <- read.csv("df.csv", stringsAsFactors = FALSE)
names(df) <- gsub("X", "", names(df))           #remove leading X
names(df) <- gsub("\\.", "-", names(df))        #convert . to -

日期列现在具有以下格式:M-D-YY

dates <- mdy(names(df[,-c(1:4)])) #take current names and assign converted names to `dates` vector

日期向量现在包含YYYY-MM-DD 格式的日期。我想取这个dates 向量并将其分配为列4:length(df) 中的名称

我尝试了以下方法:

names(df[,-c(1:4)]) &lt;- dates ,但原始数据框中的列名保持不变。并保持M-D-YY 的格式。

我觉得我可能想多了,重命名特定列可能有更简单的方法。我也从 尝试过rename(),但只在单独命名列方面取得了成功,而且这个数据集有数百列。

我该怎么办?感谢您的意见...

【问题讨论】:

  • 您可能需要一些前缀,因为 R 中以数字开头的列名无效。您可能还想查看?make.names

标签: csv lubridate dplyr r dplyr lubridate


【解决方案1】:

names 参数应该是

library(lubridate)
dates <- as.character(mdy(names(df)[-c(1:4)]))
names(df)[-c(1:4)] <- dates

如果我们使用check.names = FALSE,这可以避免

df <- read.csv("df.csv", stringsAsFactors = FALSE, check.names = FALSE)

【讨论】:

  • 如果我也将dates 向量转换为带有dates &lt;- as.character(dates) 的字符串,我就能让它工作。否则我得到的转换值读取为182841828918294 等。我猜我不能将列名设置为日期类型,这是正确的吗?
  • @KVSEA 原因是Date 类在内部存储为数字。它被强制转换为那种类型。通过转换为character,它仍然存在
猜你喜欢
  • 2015-01-13
  • 1970-01-01
  • 1970-01-01
  • 2022-10-16
  • 1970-01-01
  • 1970-01-01
  • 2018-08-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多