※ 引述《SleepyChink (SleepyChink)》之銘言:
: [問題類型]:
: 我想用R做一件事,但不知道如何完成。
: [軟體熟悉度]:
: 請把以下不需要的部份刪除
: 新手(沒寫過程式,R 是我的第一次)
: [問題敘述]:
: X Y Z Val
: 1 1 1 1 1
: 2 2 1 1 0
: 3 1 2 1 0
: 4 2 2 1 0
: 5 1 1 2 1
: 6 2 1 2 1
: 7 1 2 2 1
: 8 2 2 2 0
: 要如何將資料按照Val分成兩組連續資料?
: 大概成為下列樣式
: Val. 0. 1.
: 2. 1.
: 1. 1.
: 1. 1.
: 1. 1.
: 2. 1.
: 1. 2.
: 以此類推資料長度不會一樣,不足可以以0補齊嗎?
: 麻煩大家幫忙解惑一下,遇過幾次感覺應該是基本的資料處理,但依舊卡以剛開始學習請
: 多多包涵。
: 謝謝
:
library(data.table)
library(magrittr)
library(plyr)
library(dplyr)
library(tidyr)
dat <- fread('
X Y Z Val
1 1 1 1
2 1 1 0
1 2 1 0
2 2 1 0
1 1 2 1
2 1 2 1
1 2 2 1
2 2 2 0') %>% tbl_dt
# dplyr
gather(dat, cate1, cate2, -Val)
# Source: local data table [24 x 3]
#
# Val cate1 cate2
# (int) (chr) (int)
# 1 1 X 1
# 2 0 X 2
# 3 0 X 1
# 4 0 X 2
# 5 1 X 1
# 6 1 X 2
# 7 1 X 1
# 8 0 X 2
# 9 1 Y 1
# 10 0 Y 1
# .. ... ... ...
# stack
dat %<>% tbl_df # data.table不能用stack,轉成data.frame
stack(dat, -Val) %>% cbind(rep(dat$Val, 3))
# values ind rep(dat$Val, 3)
# 1 1 X 1
# 2 2 X 0
# 3 1 X 0
# 4 2 X 0
# 5 1 X 1
# 6 2 X 1
# 7 1 X 1
# 8 2 X 0
# 9 1 Y 1
# 10 1 Y 0
# 11 2 Y 0
# 12 2 Y 0
# 13 1 Y 1
# 14 1 Y 1
# 15 2 Y 1
# 16 2 Y 0
# 17 1 Z 1
# 18 1 Z 0
# 19 1 Z 0
# 20 1 Z 0
# 21 2 Z 1
# 22 2 Z 1
# 23 2 Z 1
# 24 2 Z 0