很抱歉,如果这是重复的,我发现很多答案,您可以将数据框中的值更改为基于另一列的数字或字符串,但是当尝试根据更改每个值时,它似乎不起作用那个价值。
所以我尝试使用一些答案,例如我阅读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)}})
虽然正确的值正在打印到控制台,但我不知道如何使用它来编辑我的数据框。
答案 0 :(得分:2)
据我所知,您不能这样做,因为您正在尝试使用属于character
和Date
类的值的列。不,你可以通过两种方式解决问题。
第一个解决方案
您可以通过以下方式创建另一列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"])
你所拥有的代码即使有效,如果连续运行两次也会产生不同的结果: