R列的日期格式基于其他列的标准

时间:2017-01-06 15:52:37

标签: r date dataframe format

很抱歉,如果这是重复的,我发现很多答案,您可以将数据框中的值更改为基于另一列的数字或字符串,但是当尝试根据更改每个值时,它似乎不起作用那个价值。

所以我尝试使用一些答案,例如我阅读R - Update a Value in One Column Based on Criteria in Other Columns

现在看看我的数据:

class(df[1,1])
[1] "character"

>df[1,1]  

[1] "2015-03-01T00:00:00Z"

>as.Date(df[1,1])

[1] "2015-03-01"

所以我知道我可以将数据转换为我想要的样子。但是:

> df$a[df$b=="start"] <- as.Date(df$a[df$b=="start"])
> df[1,1]
[1] "16495"

我可以将它们全部更改为多个字符串,但是当我尝试对每个值执行as.Date时,由于某种原因它会返回一个奇怪的数字

我很快就试过了:

lapply(df, function(x){if(df$b=="experience.start"){df$a<-as.Date(df$a)}})

虽然正确的值正在打印到控制台,但我不知道如何使用它来编辑我的数据框。

2 个答案:

答案 0 :(得分:2)

据我所知,您不能这样做,因为您正在尝试使用属于characterDate类的值的列。不,你可以通过两种方式解决问题。

第一个解决方案

您可以通过以下方式创建另一列newdates

df$newdates <- as.Date(NA)
df$newdates[df$b == "experience.start"] <- as.Date(df$a[df$b == "experience.start"])

使用此代码,您将填充一些行NA,因为并非所有行的b列都等于experience.start

第二个解决方案

您可以同意妥协并转换Date中的character

df$a[df$b == "experience.start"] <- as.character(as.Date(df$a[df$b=="experience.start"]))

以这种方式,a列的类型将为character,当b等于experience.start时,您将找到此格式的日期:{ {1}}否则格式为2015-03-04

答案 1 :(得分:1)

假设我理解您的数据框设置,而不是将值分配给&#34; a&#34;变量,创建一个新的Date变量并分配给它。

正如Haboryme所说,你现有的专栏&#34; a&#34;是一个字符向量,as.Date()返回一个Date对象,该对象正在即时转换为字符 - 请注意"16495"周围的引号。

通过分配不同的变量,R会自动将其设为日期向量,并且您还可以保存原始信息并使代码整体更安全。

下面的代码应该可以工作,即使你连续多次运行它也会产生相同的结果。

df$c <- as.Date(NA)
df$c[df$b=="start"] <- as.Date(df$a[df$b=="start"])

你所拥有的代码即使有效,如果连续运行两次也会产生不同的结果: