2017-04-10 2 views
3

長時間回答者、初めて質問質問者。次いでによって下降、データフレーム行からのマイニングシーケンス

regions 
VE 
PU 
PR 
DE 
NU 
AD 
DE 
NO 
AD 

Iが2と3の長さと、列の配列としてこれらを抽出しようとしている:私は、単一の列であるRデータフレーム、17の因子と267,000行、これ等を有しています1行と最後まで繰り返す。繰り返し、注文する。私は上記を取り、それはこのように見えるようにしたい:

s1 s2 
VE PU 
PU PR 
PR DE 
DE NU 
NU AD 
AD DE 
DE NO 

私はTraMinErとArulesSequencesのようなパッケージを使用してみましたが、私はそれらを把握することはできません。私のシーケンスは純粋に状態なので、ソースデータセットでさえ一時的な情報は付いていないからだと思います。自分のイテレータスクリプトを作ってみましたが、うまくできませんでした。私は無限にグーグルで行きました。私はこれをする方法を知らない。最終的な目標は、出力を2または3の置換データフレームと一致させ、一致がない場合は1,0で一致させ、新しいデータフレームにそのx49を処理することです。

私はプログラミングやRの専門家ではなく、初心者ユーザーです。誰もがこれを行うことができるスクリプトやパッケージを知っていますか?あなたは基本的に何をしたいのか

答えて

3

s2への最初の観測なしs1regionsに最後の観察せずにregionsを割り当てることです。必ずしも余分なパッケージは必要ありません。

1)あなたは、最後の観察(head(column, -1))または最初の観測(tail(column, -1))なしなしベクトルを取得することができますheadtail機能これらにより

を使用する:いくつかのアプローチがあります。使用

new.df <- data.frame(s1 = head(df$regions,-1), s2 = tail(df$regions,-1)) 

は、このようにあなたを取得します:

> new.df 
    s1 s2 
1 VE PU 
2 PU PR 
3 PR DE 
4 DE NU 
5 NU AD 
6 AD DE 
7 DE NO 
8 NO AD 

あなたは3つの列をしたい場合は、あなたができる:

になり
new.df <- data.frame(s1 = head(df$regions,-2), 
        s2 = head(tail(df$regions,-1),-1), 
        s3 = tail(df$regions,-2)) 

> new.df 
    s1 s2 s3 
1 VE PU PR 
2 PU PR DE 
3 PR DE NU 
4 DE NU AD 
5 NU AD DE 
6 AD DE NO 
7 DE NO AD 

2)基本的なサブセット

headtail機能に代わるものとして、あなたはまた、基本的なサブセットを使用することができます。

new.df <- data.frame(s1 = df$regions[-nrow(df)], 
        s2 = df$regions[-1]) 

3)を使用して、 embed-機能

n <- 3 
new.df <- data.frame(embed(df$regions, n)[,n:1]) 
names(new.df) <- paste0('s',1:n) 

与える:

> new.df 
    s1 s2 s3 
1 VE PU PR 
2 PU PR DE 
3 PR DE NU 
4 DE NU AD 
5 NU AD DE 
6 AD DE NO 
7 DE NO AD 

4)もあるかもしれないdata.tableパッケージからdata.table -package

からshift機能をshift -functionを使用してオプション:

library(data.table) 
dt <- as.data.table(df) 
new.dt <- na.omit(dt[, .(s1 = regions, 
         s2 = shift(regions, 1, NA, 'lead'), 
         s3 = shift(regions, 2, NA, 'lead'))]) 

、代わりのna.omit、あなたもis.narowSumsを使用することもできます。

new.dt <- dt[, .(s1 = regions, 
       s2 = shift(regions, 1, NA, 'lead'), 
       s3 = shift(regions, 2, NA, 'lead'))] 

new.dt[rowSums(is.na(new.dt))==0] 
+1

これは機能しました。自分のデータをセットとしてもっと考えさせました。私はあなたの援助に非常に感謝します。二値化も完了しました。 – user7845625

3

ます。また、パッケージdplyrtransmuteleadを使用することができます:あなたは3のシーケンスを望んでいた場合

df1 <-read.table(text="regions 
VE 
PU 
PR 
DE 
NU 
AD 
DE 
NO 
AD",header=TRUE, stringsAsFactors=FALSE) 

library(dplyr) 
df1 %>% transmute(s1=regions,s2=lead(regions)) %>%na.omit 

    s1 s2 
1 VE PU 
2 PU PR 
3 PR DE 
4 DE NU 
5 NU AD 
6 AD DE 
7 DE NO 
8 NO AD 

、別の列を追加することができますlead(regions,2)

df1 %>% transmute(s1=regions,s2=lead(regions),s3=lead(regions,2)) %>%na.omit 
    s1 s2 s3 
1 VE PU PR 
2 PU PR DE 
3 PR DE NU 
4 DE NU AD 
5 NU AD DE 
6 AD DE NO 
7 DE NO AD 
関連する問題