簡體   English   中英

如何根據另一列是否滿足 R 中的條件為列分配字符值?

[英]How can I assign a column a character Value based on whether another column meets a condition in R?

我有多個事件(行)發生在某個日期和時間。 我想將它們按另一列分組,然后在一個單獨的列中,如果它們是最早的日期,則該列將是“否”,如果不是,則該列將是“是”。 下面是我的數據的前 20 行

            Event     Rework         lm_date
1           409974     NA 2019-10-16 18:34:00
2           409974     NA 2019-11-24 17:02:00
3           409974     NA 2019-11-25 17:18:00
4           409974     NA 2019-12-10 20:46:00
5           410047     NA 2019-09-09 20:39:00
6           410047     NA 2019-09-10 18:46:00
7           410172     NA 2019-09-10 18:50:00
8           410172     NA 2019-09-10 20:02:00
9           410172     NA 2019-09-11 20:46:00
10          410172     NA 2019-09-13 17:40:00
11          410172     NA 2019-10-11 03:02:00
12          411169     NA 2019-10-03 16:06:00
13          411169     NA 2019-11-07 20:56:00
14          411169     NA 2019-11-08 20:02:00
15          411229     NA 2019-10-14 16:13:00
16          411229     NA 2019-11-06 16:43:00
17          411229     NA 2019-11-07 21:28:00
18          411229     NA 2019-11-11 21:45:00
19          411929     NA 2019-09-17 22:34:00
20          411929     NA 2019-09-19 20:46:00

例如,我想按事件分組,因此第一組將是 409974,並且返工列的第一行為“否”,事件中每隔一行為“是”,即接下來的 3 行。 我嘗試使用

CATASK %>% group_by(Event) %>% mutate(if (lm_date == min(lm_date) {
  Rework == "No"} 
  else {
    Rework == "Yes"
  }
))

但無濟於事.. 任何建議將不勝感激!

我建議使用mutate()並使用min()檢查最舊的日期的下一個tidyverse方法:

library(tidyverse)
#Format date
df %>% mutate(lm_date=as.POSIXct(lm_date)) %>%
  group_by(Event) %>%
  mutate(Rework=ifelse(lm_date==min(lm_date),'No','Yes'))

輸出:

# A tibble: 20 x 3
# Groups:   Event [6]
    Event lm_date             Rework
    <dbl> <dttm>              <chr> 
 1 409974 2019-10-16 18:33:59 No    
 2 409974 2019-11-24 17:02:00 Yes   
 3 409974 2019-11-25 17:18:00 Yes   
 4 409974 2019-12-10 20:45:59 Yes   
 5 410047 2019-09-09 20:39:00 No    
 6 410047 2019-09-10 18:46:00 Yes   
 7 410172 2019-09-10 18:49:59 No    
 8 410172 2019-09-10 20:02:00 Yes   
 9 410172 2019-09-11 20:45:59 Yes   
10 410172 2019-09-13 17:39:59 Yes   
11 410172 2019-10-11 03:01:59 Yes   
12 411169 2019-10-03 16:05:59 No    
13 411169 2019-11-07 20:55:59 Yes   
14 411169 2019-11-08 20:02:00 Yes   
15 411229 2019-10-14 16:12:59 No    
16 411229 2019-11-06 16:43:00 Yes   
17 411229 2019-11-07 21:27:59 Yes   
18 411229 2019-11-11 21:45:00 Yes   
19 411929 2019-09-17 22:34:00 No    
20 411929 2019-09-19 20:45:59 Yes  

接下來用到的一些數據:

#Data
df <- structure(list(Event = c(409974, 409974, 409974, 409974, 410047, 
410047, 410172, 410172, 410172, 410172, 410172, 411169, 411169, 
411169, 411229, 411229, 411229, 411229, 411929, 411929), lm_date = structure(c(1571250840, 
1574614920, 1574702280, 1576010760, 1568061540, 1568141160, 1568141400, 
1568145720, 1568234760, 1568396400, 1570762920, 1570118760, 1573160160, 
1573243320, 1571069580, 1573058580, 1573162080, 1573508700, 1568759640, 
1568925960), class = c("POSIXct", "POSIXt"), tzone = "GMT")), class = "data.frame", row.names = c(NA, 
-20L))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM