簡體   English   中英

R - 基於另一列以差異方式創建新列

[英]R - Create new column differentially based on another column

我有以下數據集:

ID year start_year
a  1    1
a  2    1
a  3    1
b  1    2
b  2    2
b  3    2
c  1    3
c  2    3
c  3    3

我想創建一個新的虛擬列present對於每個 ID,如果 start_year 為 1,則為 1-1-1,如果 start_year 為 2,則為 0-1-1,如果 start_year 為 3,則為 0-0-1。我的目標是獲得下表:

ID year start_year present
a  1    1          1
a  2    1          1
a  3    1          1
b  1    2          0
b  2    2          1
b  3    2          1
c  1    3          0
c  2    3          0
c  3    3          1

我想這對你們大多數人來說應該相當容易,但我真的被困住了。 非常感謝您的幫助!

更簡單的選擇是創建一個鍵/值list ,然后使用每個“ID”的“start_year”的first元素對list進行子集化(假設每組只有 3 個元素)

library(dplyr)
lst1 <- list(`1` = c(1, 1, 1), `2` = c(0, 1, 1), `3` = c(0, 0, 1))
df1 %>%
   group_by(ID) %>% 
   mutate(present = lst1[[as.character(first(start_year))]]) %>%
   ungroup

-輸出

# A tibble: 9 × 4
  ID     year start_year present
  <chr> <int>      <int>   <dbl>
1 a         1          1       1
2 a         2          1       1
3 a         3          1       1
4 b         1          2       0
5 b         2          2       1
6 b         3          2       1
7 c         1          3       0
8 c         2          3       0
9 c         3          3       1

數據

df1 <- structure(list(ID = c("a", "a", "a", "b", "b", "b", "c", "c", 
"c"), year = c(1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L), start_year = c(1L, 
1L, 1L, 2L, 2L, 2L, 3L, 3L, 3L)), class = "data.frame", row.names = c(NA, 
-9L))

一種可能的方法:

library(tidyverse)

df <- tribble(
  ~ID, ~year, ~start_year,
  "a", 1, 1,
  "a", 2, 1,
  "a", 3, 1,
  "b", 1, 2,
  "b", 2, 2,
  "b", 3, 2,
  "c", 1, 3,
  "c", 2, 3,
  "c", 3, 3
)

df |> mutate(present = if_else(start_year <= year, 1, 0))
#> # A tibble: 9 × 4
#>   ID     year start_year present
#>   <chr> <dbl>      <dbl>   <dbl>
#> 1 a         1          1       1
#> 2 a         2          1       1
#> 3 a         3          1       1
#> 4 b         1          2       0
#> 5 b         2          2       1
#> 6 b         3          2       1
#> 7 c         1          3       0
#> 8 c         2          3       0
#> 9 c         3          3       1

reprex package (v2.0.1) 創建於 2022-05-27

暫無
暫無

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

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