R语言如何创建合并行的数值型新列用作图表X轴
问题根因
你直接拼接Day、Month、Year三列得到的是类似1.02.2000的字符串,单个字符串内包含2个.分隔符,不符合R数值型数据的格式规则,直接调用as.numeric()无法解析,会触发NA生成的报错/警告。
另外要注意:如果直接把拼接后的字符列当X轴使用,会出现刻度顺序错乱的问题(比如10.01.2000会按字典序排在2.01.2000前面),不适合直接做绘图轴。
实现方案
方案1:标准日期列(绘图X轴首选)
底层为R内置Date类型(本质是数值型时间戳),可以被绘图函数自动识别为时间轴,自动生成合理刻度,同时可以调整显示格式和你给出的示例完全一致。
# 先构造示例测试数据 df <- data.frame( Day = c(1,2,3), Month = c(2,2,3), Year = c(2000,2000,2000) ) # 生成标准日期列 df$Date <- as.Date(paste(df$Year, df$Month, df$Day, sep = "-")) # 如果需要列显示为 日.月.年 的点分隔格式,用format转换显示样式即可 df$Date_char <- format(df$Date, "%d.%m.%Y")
运行后得到的结果和你给出的示例完全一致:
Day Month Year Date_char 1 1 2 2000 01.02.2000 2 2 2 2000 02.02.2000 3 3 3 2000 03.03.2000
绘图时直接用Date列(Date类型)做X轴即可,刻度顺序、时间间隔都会自动适配,如果要显示为点分隔样式,在绘图函数的刻度标签参数里调整格式就行,不需要把列本身改成带点的字符型。
方案2:纯数值型存储列
如果你需要严格的数值型向量存储合并结果,直接将日期转为数值型时间戳即可,该值是距离1970-01-01的天数,为纯数值,可直接参与数值运算、作为数值轴输入:
df$Date_num <- as.numeric(as.Date(paste(df$Year, df$Month, df$Day, sep = "-")))
需要展示为日.月.年格式时,再单独做格式化转换即可,不要在存储层保留带分隔符的字符串。
注意
不要直接用paste(Day, Month, Year, sep = ".")的结果做X轴,字符型的排序规则和时间顺序不一致,会导致图表刻度逻辑错误。
内容的提问来源于stack exchange,提问作者BERŞAN DİDAR MELET
相关产品推荐
相关产品推荐

