Как изменить даты во фрейме данных? - PullRequest
0 голосов
/ 08 июля 2020

Во фрейме данных, который я вызвал в R, я пытаюсь изменить указанные даты на другую дату. Например, я хочу, чтобы 2020-06-04 превратился в 2020-06-03.

Ниже приведен код, который я пытался написать для этого, но не смог.

Я также сделал это с предыдущим фреймом данных:

AbsoluteCover$Date <- as.Date(AbsoluteCover$Date,
                   format = "%m/%d/%y")

1:

AC <- mutate(AbsoluteCover, NewDate = c("2020-06-04" == "2020-06-03" & "2020-06-19" == "2020-06-18" & "2020-07-12" == "2020-07-28"))

Это просто создает новый столбец с именем «NewDate», но со всеми FALSE в ячейках. Этот результат имеет смысл, но это не то, что я хочу.

2:

AC <- AbsoluteCover %>% mutate(Date, "2020-06-04" == "2020-06-03" & "2020-06-19" == "2020-06-18" & "2020-07-12" == "2020-07-28")

Это делает то же самое, что и 1 выше. 1021 *

Это просто возвращает фрейм данных с одним столбцом с датами.

Вот пример моего фрейма данных:

dput(head(AbsoluteCover))
structure(list(Plot = c("A1", "A1", "A1", "A2", "A2", "A2"), 
    Date = structure(c(18417, 18432, 18455, 18417, 18432, 18455
    ), class = "Date"), Cover = c(12L, 34L, 17L, 2L, 50L, 3L)), row.names = c(NA, 
-6L), class = c("grouped_df", "tbl_df", "tbl", "data.frame"), groups = structure(list(
    Plot = c("A1", "A2"), .rows = list(1:3, 4:6)), row.names = c(NA, 
-2L), class = c("tbl_df", "tbl", "data.frame"), .drop = TRUE))

Ответы [ 2 ]

0 голосов
/ 15 июля 2020

Вы можете использовать mutate и case_when:

library(dplyr)
df %>% mutate(Date = case_when( 
  Date == "2020-06-04" ~ "2020-06-03", 
  Date == "2020-06-19" ~ "2020-06-18", 
  Date == "2020-07-12" ~ "2020-07-28"))
# A tibble: 6 x 3
# Groups:   Plot [2]
  Plot  Date       Cover
  <chr> <chr>      <int>
1 A1    2020-06-03    12
2 A1    2020-06-18    34
3 A1    2020-07-28    17
4 A2    2020-06-03     2
5 A2    2020-06-18    50
6 A2    2020-07-28     3
0 голосов
/ 08 июля 2020

Поскольку вы не предоставили образец фрейма данных, я разработал пример, используя тестовый набор данных.

Вы можете использовать функцию which для выбора строк на основе условия

dates = c(as.Date('2020-06-04'), as.Date('2020-01-03'))
df = data.frame('a' = sample(dates, 15, replace= TRUE))
df
#>             a
#> 1  2020-01-03
#> 2  2020-06-04
#> 3  2020-06-04
#> 4  2020-01-03
#> 5  2020-06-04
#> 6  2020-06-04
#> 7  2020-01-03
#> 8  2020-06-04
#> 9  2020-01-03
#> 10 2020-01-03
#> 11 2020-01-03
#> 12 2020-01-03
#> 13 2020-01-03
#> 14 2020-06-04
#> 15 2020-06-04
df[which(df$a == as.Date('2020-06-04')), 'a'] = as.Date('2020-06-03')
df
#>             a
#> 1  2020-01-03
#> 2  2020-06-03
#> 3  2020-06-03
#> 4  2020-01-03
#> 5  2020-06-03
#> 6  2020-06-03
#> 7  2020-01-03
#> 8  2020-06-03
#> 9  2020-01-03
#> 10 2020-01-03
#> 11 2020-01-03
#> 12 2020-01-03
#> 13 2020-01-03
#> 14 2020-06-03
#> 15 2020-06-03

Создано 09.07.2020 с помощью пакета . (v0.3.0)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...