質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
R

R言語は、「S言語」をオープンソースとして実装なおした、統計解析向けのプログラミング言語です。 計算がとても速くグラフィックも充実しているため、数値計算に向いています。 文法的には、統計解析部分はS言語を参考にしており、データ処理部分はSchemeの影響を受けています。 世界中の専門家が開発に関わり、日々新しい手法やアルゴリズムが追加されています。

Q&A

解決済

2回答

244閲覧

条件式の設定:日付けが他の日付けから見て、何番目にあたるのか?の条件式

keikmyo

総合スコア9

R

R言語は、「S言語」をオープンソースとして実装なおした、統計解析向けのプログラミング言語です。 計算がとても速くグラフィックも充実しているため、数値計算に向いています。 文法的には、統計解析部分はS言語を参考にしており、データ処理部分はSchemeの影響を受けています。 世界中の専門家が開発に関わり、日々新しい手法やアルゴリズムが追加されています。

0グッド

0クリップ

投稿2022/10/02 11:39

Rにて条件式の設定をしています。下記データを用いています。
イメージ説明

事例の様にrank_datea 列に date_amin の日付けが他のdateから見て何番目に当たるのかの
条件設定をしたいと思っています。
rank_dateaが1になるように設定するのは簡単ですが、他の順位(2番目以降)も抽出できるように設定することに難儀しています。
ご教示いただけますと幸いです。

よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

dplyr を使う場合。

r

1library(dplyr) 2library(tibble) 3 4df <- data.frame( 5 X = c(1, 2, 3), id = c(1, 2, 4), 6 date_amin = c("2020/4/1", "2019/7/14", "2021/12/1"), 7 date_bmin = c("2021/4/1", "2018/5/1", "2021/10/1"), 8 date_cmin = c("2019/2/8", "2018/7/19", "2022/3/8"), 9 date_dmin = c("2022/3/8", "2019/7/29", "2022/5/1"), 10 date_dmin.1 = c("2021/3/8", "2021/3/10", "2021/6/3")) 11 12df <- df %>% 13 # 名前が "date_" で始まるカラムを Date 型に変換 14 mutate(across(starts_with("date_"), ~as.Date(.))) %>% 15 # 行単位で処理 16 rowwise() %>% 17 # 最初の列(date_amin)の順位(ranking)を計算 18 mutate(rank_datea = first(dense_rank(c_across(starts_with("date_"))))) 19 20df

実行結果

r

1# A tibble: 3 × 8 2# Rowwise: 3 X id date_amin date_bmin date_cmin date_dmin date_dmin.1 rank_datea 4 <dbl> <dbl> <date> <date> <date> <date> <date> <int> 51 1 1 2020-04-01 2021-04-01 2019-02-08 2022-03-08 2021-03-08 2 62 2 2 2019-07-14 2018-05-01 2018-07-19 2019-07-29 2021-03-10 3 73 3 4 2021-12-01 2021-10-01 2022-03-08 2022-05-01 2021-06-03 3

投稿2022/10/02 17:57

melian

総合スコア19749

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

keikmyo

2022/10/03 08:05

解答をいただきまして、ありがとうございます!うまくランク付けすることができました。 もし可能であればc_acrossとacross関数の違いについてご教示いただくことは可能でしょうか? あとすごく初歩的な質問で恐縮ですが、~の使い方をマスターしておりません。ネットなどで検索してもあまりうまくヒットしないためご教示いただけますと幸いです。よろしくお願いいたします。
melian

2022/10/03 08:44

c_across は rowwise と組み合わせて使う事を前提としていまして、行単位の集計に特化しています。~ にはついては function と同じ意味で、以下の様に書くこともできます。 mutate(across(starts_with("date_"), function(x){as.Date(x)}))
keikmyo

2022/10/04 04:49

丁寧に解説を頂きまして、ありがとうございます。理解が深まりました!
guest

0

日付データをDateオブジェクトに変換し、order()で順位をつければいいと思います。

df1 <- read.table(header=T, text=" id date_amin rank_datea 1 2020/4/1 NA 2 2019/7/14 NA 4 2021/12/1 NA") print(df1) df1$rank_datea <- order(strptime(df1$date_amin, "%Y/%m/%d")) print(df1)

投稿2022/10/02 14:47

KojiDoi

総合スコア13671

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問