如何在R中的数据框中使用mutate根据第二列的值更新列

问题描述 投票:0回答:1

在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.
r dataframe mutate
1个回答
0
投票

使用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会更容易处理。

© www.soinside.com 2019 - 2024. All rights reserved.