5

複数行のテキストをデータ フレームに変換する方法を見つけようとしています。read.delim() 複数行のテキストを読み込んで、次のようなデータ フレームを作成する方法があるかどうかはわかりrehape()ません。

データは次のように構成されています。

A: 1
B: 2
C: 10
A: 34
B: 20
C: 6.7
A: 2
B: 78
C: 35

このデータを次のデータ フレームのようなものに変換したいと思います。

A             B             C
1             2             10
34            20            6.7
2             78            35

これを行う明白な方法があればお詫びします!

4

4 に答える 4

11

どうですか :

s<-"A: 1
B: 2
C: 10
A: 34
B: 20
C: 6.7
A: 2
B: 78
C: 35
"
d<-read.delim(textConnection(s),header=FALSE,sep=":",strip.white=TRUE)
cols<-levels(d[,'V1'])
d<-data.frame(sapply(cols,function(x) {d['V2'][d['V1']==x]}, USE.NAMES=TRUE))

これにより、次の結果が得られます。

   A  B    C
1  1  2 10.0
2 34 20  6.7
3  2 78 35.0
于 2010-03-06T15:22:39.773 に答える
4

plyrパッケージでそれを行う方法は次のとおりです。

require("plyr")
my.data <- "A: 1
            B: 2
            C: 10
            A: 34
            B: 20
            C: 6.7
            A: 2
            B: 78
            C: 35"   
df <- read.delim(textConnection(my.data),header=FALSE,sep=":",strip.white=TRUE)

as.data.frame(dlply(df,.(V1),function(x) x[[2]]))

あなたが得る

   A  B    C
1  1  2 10.0
2 34 20  6.7
3  2 78 35.0

dlply(df,.(V1))またはで遊ぶだけで、魔法のプライヤーが何をしているのかを見ることができますdlply(df,.(V1),function(x) x)

于 2010-03-06T05:53:37.803 に答える
2

この質問を R-help にも投稿したところ、Phil Spector からunstack.

これは、Leo Alekseyev の応答の修正です。

my.data <- "A: 1
            B: 2
            C: 10
            A: 34
            B: 20
            C: 6.7
            A: 2
            B: 78
            C: 35"   
df <- read.delim(textConnection(my.data),header=FALSE,sep=":",strip.white=TRUE)
unstack(df, V2 ~ V1)

これにより、次の結果が得られます。

   A  B    C
1  1  2 10.0
2 34 20  6.7
3  2 78 35.0

他の思慮深い回答と比較したこのアプローチの利点は、列の数を事前に指定する必要がないことです。また、追加のパッケージは必要ありません。

于 2010-03-06T21:46:32.300 に答える
0

reshape を使用した 1 つのソリューションを次に示します。

s<-"A: 1
B: 2
C: 10
A: 34
B: 20
C: 6.7
A: 2
B: 78
C: 35
"
d<-d<-read.delim(textConnection(s),header=FALSE,sep=":",strip.white=TRUE)
N<-nrow(d)%/%3
d$id<-rep(1:N,each=3)
reshape(d,dir="wide",timevar="V1",idvar="id")

生産する

  id V2.A V2.B V2.C
1  1    1    2 10.0
4  2   34   20  6.7
7  3    2   78 35.0
于 2010-03-06T05:29:20.697 に答える