在R中,我试图根据另一列的值更新数据框中的一列
所以数据帧是2列第1列s / b数字,第二列是日期。对于3个特定日期,我需要将考试列更新为特定值。数据框看起来像这样:
Exams Year
NA 2009-12-01
NA 2010-01-01
NA 2010-02-01
我想将NA更改为这3个日期的特定值
我试过这个:
library(dplyr)
ABVILE %>%
mutate(Exams=replace(Exams, Year==2009-12-01, 1709.67)) %>%
as.data.frame()
并尝试将我需要的值更新为一个变量,但它不会以任何方式进行更新,我也不会收到错误。
我希望它是这样的:
1709.67 2009-12-01
但我明白了:
NA 2009-12-01.
使用dplyr
方法有(至少)两个选项。请注意,这里我假设你的Year
变量是一个字符向量。第一个选项使用ifelse
语句:
ABVILE %>%
mutate(Exams = ifelse(Year == "2009-12-01", 1709.67, Exams)) %>%
data.frame
ifelse
采用一个测试条款和两个返回条件(如果该条款分别符合和不符合条款)。如果您只有一个测试条件,这是一个简单的解决方案。如果你必须将它们中的许多串在一起,那么dply
提供了一个很好的函数叫做case_when
。这是什么样子:
ABVILE %>%
mutate(Exams = case_when(Year == "2009-12-01" ~ 1709.67,
Year == "2010-01-01" ~ 999.999)) %>%
data.frame
这相当于
ABVILE %>%
mutate(Exams = ifelse(Year == "2009-12-01", 1709.67,
ifelse(Year == "2010-01-01", 999.999, NA))) %>%
data.frame
显然,如果你有很多测试条件/作业,case_when
会更容易处理。