dates <- as.Date(dli$Dates)
class(dates)
[1] "Date"
dates
[1] "2016-01-01" "2016-01-02" "2016-01-03" "2016-01-04" "2016-01-05" "2016-01-06"
[7] "2016-01-07" "2016-01-08" "2016-01-09" "2016-01-10" "2016-01-11" "2016-01-12"
[13] "2016-01-13" "2016-01-14" "2016-01-15" "2016-01-16" "2016-01-17" "2016-01-18"
[19] "2016-01-19" "2016-01-20" "2016-01-21" "2016-01-22" "2016-01-23" "2016-01-24"
[25] "2016-01-25" "2016-01-26" "2016-01-27" "2016-01-28" "2016-01-29" "2016-01-30"
[31] "2016-01-31" "2016-02-01" "2016-02-02" "2016-02-03" "2016-02-04" "2016-02-05"
[37] "2016-02-06" "2016-02-07" "2016-02-08" "2016-02-09" "2016-02-10" "2016-02-11"
这是我的日期格式,所以我需要将其转换为“2016个月 - 日” 我得到NA值
dates <- as.Date(dli$Dates,"%d/%b/%Y")
class(dates)
[1] "Date"
dates
[1] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
[31] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
[61] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
[91] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
[121] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
你可以提出任何建议吗?
在此先感谢
答案 0 :(得分:3)
如果您只想以此格式呈现日期,请使用format
:
x <- as.Date("2016-01-01")
format(x, "%Y %b %a %d")
[1] "2016 Jan Fri 01"
这里存在分歧。如果您已将日期信息存储在R中作为日期类型,则无需在内部更改任何内容以从这些日期中提取更多信息。
答案 1 :(得分:2)
要获得所需的格式,即 2016-month-day ,您可以在将字符串向量转换为数据类型后使用public class BindableBase : INotifyPropertyChanged
{
///
/// Multicast event for property change notifications.
///
public event PropertyChangedEventHandler PropertyChanged;
///
/// Checks if a property already matches a desired value. Sets the property and
/// notifies listeners only when necessary.
///
///Type of the property.
///Reference to a property with both getter and setter.
///Desired value for the property.
///Name of the property used to notify listeners. This
/// value is optional and can be provided automatically when invoked from compilers that
/// support CallerMemberName.
///True if the value was changed, false if the existing value matched the
/// desired value.
protected bool SetProperty<T>(ref T storage, T value, [CallerMemberName] string propertyName = null)
{
if (object.Equals(storage, value)) return false;
storage = value;
this.OnPropertyChanged(propertyName);
return true;
}
///
/// Notifies listeners that a property value has changed.
///
///Name of the property used to notify listeners. This
/// value is optional and can be provided automatically when invoked from compilers
/// that support .
protected void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
this.PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
函数。
我希望下面的代码段清除您的怀疑。
format
格式化功能将日期类型对象转换为所需格式。有关日期类型格式的详细信息,请参阅此link。
答案 2 :(得分:1)
良好做法是将日期存储在R中作为YYYY-MM-DD,并且您的字符串似乎已经处于良好格式,但是:
您传递给as.Date
的格式必须描述字符串包含的内容,而不是您期望作为输出的内容。
"%d/%b/%Y"
代表“天数为数字(0-31)斜线缩写为月份斜线4位数年份”,而您的字符串格式为“4位数年份 - 月份为数字 - 天数为数字”。
如果您想格式化日期,则需要致电format
:
> date <- "2016-01-01"
> date <- as.Date(date, format = "%Y-%m-%d")
> date
[1] "2016-01-01"
> format(date, "%d/%b/%Y")
[1] "01/jan/2016"
答案 3 :(得分:1)
您可以使用as.Date()
在保存为字符和Date
个对象的日期之间进行转换。
如果要更改Date
对象的格式,可以使用format()
。
您已将"2016-month-day"
指定为问题中日期的所需格式,但在您提供的代码中,您使用的是"%d/%b/%Y"
。这种方式的工作方式是:%
表示下一个字符将是转换规范,其他所有内容(例如(-
或/
)将用于查找/添加分隔符到日期表示。(详见?strptime
)。
所以在你的情况下,只需使用
dates <- format(dli$Dates, format = "%Y-%b-%d")
获取问题文本中指定的结果:
[1] "2016-Jan-01" "2016-Jan-02" "2016-Jan-03" "2016-Jan-04" "2016-Jan-05"
或者这个:
dates <- format(dli$Dates, format = "%Y/%b/%d")
获取您在代码剪辑中使用的内容:
[1] "2016/Jan/01" "2016/Jan/02" "2016/Jan/03" "2016/Jan/04" "2016/Jan/05"
答案 4 :(得分:0)
你可以使用包相同的转换为ymd的日期,然后根据你想要的方式对其进行格式化
Dates_df <- mutate(Dates, dli = format(ymd(dli), "%Y/%b/%d")
(我在这里使用dplyr,我假设你在Dates中有其他变量)
如果您只想将日期保存在矢量中,则不使用dplyr:
Dates_vec <- format(ymd(Dates$dli), "%Y/%b/%d")