これは単なるサンプルデータフレームです。IDの最後の2つのイベントを取得し、アレンジする
私は、各id_num
の最後の二つのイベントを取得し、それぞれEvent1
とEvent2
としてid_num
最後の2つのイベントからなる別のデータフレームを作りたいです。それは行うことができますどのように
?
これは単なるサンプルデータフレームです。IDの最後の2つのイベントを取得し、アレンジする
私は、各id_num
の最後の二つのイベントを取得し、それぞれEvent1
とEvent2
としてid_num
最後の2つのイベントからなる別のデータフレームを作りたいです。それは行うことができますどのように
?
これはdata.table
を使用して1行で行うことができます。
library(data.table)
dt <- data.table(id_num = rep(1:3, 4), event = paste0("E", 1:12))
# id_num event
# 1: 1 E1
# 2: 2 E2
# 3: 3 E3
# 4: 1 E4
# 5: 2 E5
# 6: 3 E6
# 7: 1 E7
# 8: 2 E8
# 9: 3 E9
# 10: 1 E10
# 11: 2 E11
# 12: 3 E12
dt[, .(event_1 = .SD[(.N-1), event], event_2 = .SD[.N, event]), by = id_num]
# id_num event_1 event_2
# 1: 1 E7 E10
# 2: 2 E8 E11
# 3: 3 E9 E12
(フロリアンのデータセット@で)tidyverse
パッケージを使用してアイデア、
library(tidyverse)
df %>%
group_by(id_num) %>%
mutate(cnt = seq(n())) %>%
slice((last(cnt)-1):last(cnt)) %>%
spread(cnt, event)
# A tibble: 2 x 3
# Groups: id_num [2]
# id_num `2` `3`
#* <dbl> <fctr> <fctr>
#1 1 E2 E3
#2 2 E4 E5
おっと、私の答えは本当に間違っていた。あなたの答えのデータセットは次のとおりです: 'df = data.frame(id_num = c(1,1,1,2,2,2)、event = c(" E1 "、" E2 "、" E3 "、" E3 "、" E4 "、" E5 ")) – Florian
あなたはaggregate
とtail
と塩基Rでこれを行うことができます。
do.call(data.frame, aggregate(event~id_num, data=df, tail, 2))
id_num event.1 event.2
1 1 E2 E3
2 2 E4 E5
あなたはaggregate
の出力のデータ構造が第二列は行列で構成されて2つの列data.frameであるため、また、その結果にdo.call
data.frame
を使用する必要があります。 do.call
の後に、3列のdata.frameの望ましい構造が得られます。
画像を共有するのではなく、他の人が簡単にできるように、画像の 'dput'を共有しようとします。 –