

ID 日付 曜日  
1 1/1 日曜日  
2 2/1 火曜日・祝日  
3 3/1 水曜日  
・  
・  
・  
のようなデータに対して、祝日を含む場合は別の変数にして取り扱いたいです。

[code]

    ph <- grep("祝日", data)
    
[/code]

として行は取得したものの、このあとどのように変数をつくればいいかで困っています。


CC BY-SA 4.0
2018-07-03T22:12:29.077
45287
2023-10-10T11:01:50.197
29169
question
r
R言語で、列の内容に特定の文字列を含む要素を抽出して新しい変数をつくりたい


`grep`で列番号が取得できているので

[code]

    ph <- data[grep("祝日", data), ]
    
[/code]

または、TRUEかFALSEを返す`grepl`を使って

[code]

    ph <- subset(data, grepl("祝日", data))
    
[/code]


CC BY-SA 4.0
2018-07-05T11:19:53.457
45331
2018-07-05T11:19:53.457
15171
45287
answer


御質問の主旨は `曜日` 列に `'祝日'`
が含まれる「行」を抽出して新しいデータフレームを作る方法と思われます。`grep()`，`grepl()`を使った記述例（`df1`, `df2`）と
`tidyverse` パッケージを使った記述例（`df3`）を示します。  
なお，実行環境は「macOS 13.3.1(M1), R 4.2.3, tidyverse 2.0.0」です。

[code]

    library(tidyverse)
    
    data <- data.frame(ID=c(1, 2, 3),
                       日付=c('1/1', '2/1', '3/1'),
                       曜日=c('日曜日', '火曜日・祝日', '水曜日'))
    
    df1 <- data[grep('祝日', data$曜日), ]   # grepl() can be also used.
    df2 <- subset(data, grepl('祝日', 曜日))
    
    df3 <- data |>
        dplyr::filter(str_detect(曜日, '祝日'))
    
    cat('data:\n')
    print(data)
    cat('df1:\n')
    print(df1)
    cat('df2:\n')
    print(df2)
    cat('df3:\n')
    print(df3)
    
[/code]

[code]

    data:
      ID 日付         曜日
    1  1  1/1       日曜日
    2  2  2/1 火曜日・祝日
    3  3  3/1       水曜日
    df1:
      ID 日付         曜日
    2  2  2/1 火曜日・祝日
    df2:
      ID 日付         曜日
    2  2  2/1 火曜日・祝日
    df3:
      ID 日付         曜日
    1  2  2/1 火曜日・祝日
    
[/code]


CC BY-SA 4.0
2023-04-10T10:35:04.490
94475
2023-04-10T10:35:04.490
54588
45287
answer