2016-08-20 8 views
1

一連の数字を数字に分割しようとしています。私はstrsplitを使って数字を分割しました。各番号は、アレイ内のすべての値の別の列になるように今、私はデータフレームにこれを入れたいデータフレームに間隔のある値を持つ配列を配置する方法は?

strings <- c("001", "002", "003", "004") 
dataset <- strsplit(strings, split="") 
dataset 

[[1]] 
[1] "0" "0" "1" 

[[2]] 
[1] "0" "0" "2" 

[[3]] 
[1] "0" "0" "3" 

[[4]] 
[1] "0" "0" "4" 

- 私は分割後持っているデータセットは次のようです。 このように -

## V1 V2 V3 
## 0 0 1 
## 0 0 2 
## . 
## . 

どのようにすればよいですか?すべての文字列が同じ長さのものであれば

答えて

2

あなたは... ... plyrパッケージトリックを行う必要があります

library(plyr) 

ldply(strsplit(as.character(dataset),split="")) 

## V1 V2 V3 
## 1 0 0 1 
## 2 0 0 2 
## 3 0 0 3 
## 4 0 0 4 
## 5 0 0 5 
## 6 0 0 6 
## 7 0 0 7 
## 8 0 0 8 
## 9 0 0 9 
## 10 0 1 0 
## 11 0 1 1 
## 12 0 1 2 
## 13 0 1 3 
+0

感謝を埋めます!パッケージを '/home/harsh/R/x86_64-pc-linux-gnu-library/3.0'にインストールする ( 'lib'は不特定) 警告メッセージ: パッケージ 'plyr'は使用できません(Rバージョン3.0用)。 2)プライヤーなしでも可能ですか? – harsh

+0

'plyr'パッケージは[CPAN(https://cran.r-project.org/web/packages/plyr/index.html)で入手可能です。しかし、私はあなたが@のpetermeissnerの答えにあるものと似たような行うことができ、R. – steveb

+1

はいのバージョン3.2.3を使用しています: 'as.data.frame(do.call(rbind、strsplit(as.character(データセット)を、スプリット= ""))) ' – steveb

1

から

as.data.frame(do.call(rbind, dataset)) 

ldplyを使用することができます。

ない場合は、物事はもう少しトリッキー得るが、これは実行する必要があります。

ケースplyrで
do.call(
    plyr::rbind.fill, 
    lapply(
    dataset, 
    function(x){as.data.frame(t(cbind(x)))} 
) 
) 

または

library(plyr 
do.call(
    rbind.fill, 
    lapply(
    dataset, 
    function(x){as.data.frame(t(cbind(x)))} 
) 
) 

は1つがrbind-の一つの独自のバージョンを作ることができるオプションではありません...

#' function for binding data.frames even if names do not match 
#' @param df1 first data.frame to rbind 
#' @param df2 second data.frame to rbind 
#' @keywords internal 

rbind_fill <- function(df1=data.frame(), df2=data.frame()){ 
    names_df <- c(names(df1), names(df2)) 
    if(dim(df1)[1] > 0){ 
     df1[, names_df[!(names_df %in% names(df1))]] <- rep(NA, dim(df1)[1]) 
    }else{ 
     df1 <- data.frame() 
    } 
    if(dim(df2)[1] > 0){ 
     df2[, names_df[!(names_df %in% names(df2))]] <- rep(NA, dim(df2)[1]) 
    }else{ 
     df2 <- data.frame() 
    } 
    rbind(df1, df2) 
} 

do.call(
    rbind_fill, 
    lapply(
    dataset, 
    function(x){as.data.frame(t(cbind(x)))} 
) 
) 
+0

ありがとう!パッケージ「plyrは」(Rバージョン3.0.2用)が利用できないです:警告メッセージ(「LIB」は指定されていないとして)「/home/harsh/R/x86_64-pc-linux-gnu-library/3.0」内にパッケージをインストールしますそれはプライなしで可能ですか? – harsh

+0

'do.call(rbind、dataset)'はそのままで動作します。 Rを更新して、もう一度plyrをインストールしてみてください。私はdata.tableパッケージは、私はあなたの最初の 'do.call'コマンドは行列ではなく、データフレームを(それは私のために働いたかつまり)を出力信じるだけでなく – petermeissner

+0

@petermeissner rbindフィル機能を持​​っていると思います。行列をデータフレームに変換する必要があります。 – steveb

関連する問題