1

同じ列名の 2 つのデータ フレームのリストがありますが、行数が異なります。rbind.fill はそれらを大きなデータ フレームにまとめるのに役立ちますが、問題は df1 の最初の列が数値データであることです。 df2 は文字データです。それらをマージすると、文字データはすべて 1 になります。検索しましたが、問題は解決しませんでした。助けていただければ幸いです。小さな例は次のとおりです。

station <- c(1:10)
value <- c(101:110)  
df1 <- data.frame(cbind(station,value)) 
station <- c("a","b")
value <- c(101:102)  
df2 <- data.frame(cbind(station,value)) 
data1 <- rbind.fill(df1,df2)

キャラクターはキャラクターのままでお願いします、ありがとう。

4

2 に答える 2

2

数値化するならキャラじゃなくてファクターです。strこれを確認するために使用します。これにより、次のことが可能になります。

df2$station <- as.character(df2$station)

EDIT:または、データフレームをクレートするときにRが文字列を係数に変換しないようにします:

df2 <- data.frame(cbind(station,value), stringsAsFactors = FALSE) 

コンソール出力:

> station <- c(1:10)
> value <- c(101:110)  
> df1 <- data.frame(cbind(station,value)) 
> station <- c("a","b")
> value <- c(101:102)  
> df2 <- data.frame(cbind(station,value)) 
> df2$station <- as.character(df2$station)
> 
> library(plyr)
> data1 <- rbind.fill(df1,df2)
> data1
   station value
1        1   101
2        2   102
3        3   103
4        4   104
5        5   105
6        6   106
7        7   107
8        8   108
9        9   109
10      10   110
11       a     1
12       b     2
于 2012-11-29T20:43:01.303 に答える
2

rbind.fillデータフレームの列名が同じであるため、使用する必要はないようです。rbindどちらがうまくいくか試してみてください。リストを使用していると述べているので、次の小さなトリックを知りたいと思うかもしれませんdo.call:

df1 <- data.frame(station = 1:10, value = 101:110) 
df2 <- data.frame(station = c("a","b"), value = 101:102) 
(data1 <- rbind.fill(df1,df2))
rbind(df1,df2)

dfl <- list(df1,df2)
do.call("rbind",dfl)

サンプルコードを「クリーン」にしたことに注意してください。すべてを連結する必要はありません。

于 2012-11-29T20:47:54.020 に答える