2016-08-18 3 views
0

私は23のデータフレームにそれぞれ200個の変数を含む観測データと13個の変数と23個の観測データフレームを含んでいます。これらの13の変数は、23のデータフレームに関する情報を保持しています。データフレームの1行を1行1列にマッチする多数の他のデータセットに追加

私がしようとしているのは、孤立したデータフレームの情報を23のリスト内のそれぞれの対応するデータフレームに追加する方法を見つけることです。その結果、23個のデータフレームのうちの1つの各観測が保持されます同じ値(例えば、データフレーム全体が記録された時点)。 孤立したデータフレームの最初の行は、23のリストの最初のデータフレームの情報に対応します。以下同様です。

ls() 
[1] "df1" "df10" "df11" "df12" "df13" "df14" "df15" "df16" "df17" "df18" "df19" "df2" 
[13] "df20" "df21" "df22" "df23" "df3" "df4" "df5" "df6" "df7" "df8" "df9" "i" 
[25] "lf" 

いくつかの研究の後、私は、リストにこれを入れてみましたが、私は実際にリストが私のデータを格納する順序は見当がつかないことに気づきました。私はdf1が孤独なフレーム "lf"の行1にマッチすることを知っています(リストがちょうどフリップするなら、私はそれを間違った方法で一致させます)。

は、だから私が試した、単一の例には(すべてではありませんがあまりにもよく)多少働いている組み合わせ:

> testdf <- c(df1,lf[1,]) 
> is.data.frame(testdf) 
[1] FALSE 
> testdf <- as.data.frame(testdf) 
> is.data.frame(testdf) 
[1] TRUE 

最初はリストだったが、as.data.frameを使用して見てみましたView()を使用して特定の列を作成すると、必要な結果が得られました。例えば"df1"内のすべての観測値に対して13:37の値を持つ "time"のような変数を含むフレームの最後の新しい列。

次私は基本的には)私が何をしたか最初に複数回(as.data.frameを(やろうとここに欠けているが、それはない... ...

for (i in 1:23){ 
+ assign(paste0("df",i), cbind(paste0("df",i),lf[i,], row.names = NULL)) 
+ } 

をループを試してみました物を変える)。何が起こるかは、各データフレームが、元のフレームの最後に追加したい13個の変数を含むObserverationを1つだけ持つようになることです。

その後は基本的にすべて***になっています。私は何時間もGoogleにしようとしましたが、実際に何かを得ることができませんでした。私はこれがリストとして最初に注文を得ることなく悪いアイデアであることを認識するまで私はそれを周りに試してみました(私は実際にどのように私はそれを整理することができる今知っているしかし、今は私はエネルギーを持っていないリストに格納されている各データフレームの名前を含むリストがあるソリューションをお持ちの場合は、その点まで確認することができます)。

EDIT私は例を挙げて、どこから来ているのかを示してみました。それがより明確になることを願っています。私は悲しいことに、このような「R-way」を解決しないことを知っています。リストを見て多くのことを適用しようとしましたが、解決策はまだ出せませんでした。

> #create 3 data frames, 5 observations and 10 variables each 
> df1 <- as.data.frame(matrix(rnorm(50, mean = 50, sd = 10), ncol = 10, nrow = 5)) 
> df2 <- as.data.frame(matrix(rnorm(50, mean = 50, sd = 10), ncol = 10, nrow = 5)) 
> df3 <- as.data.frame(matrix(rnorm(50, mean = 50, sd = 10), ncol = 10, nrow = 5)) 
> 
> #create lone data frame with 3 observerations (1 per data frame) and 2 variables 
> df4 <- as.data.frame(matrix(rnorm(6, mean = 5, sd = 1), ncol = 2, nrow = 3)) 
> 
> #create colnames for better explanation 
> cn <- c() 
> for (i in 1:12){ 
+  cn[i] <- paste0("Var",i) 
+ } 
> colnames(df1) <- cn[1:10] 
> colnames(df2) <- cn[1:10] 
> colnames(df3) <- cn[1:10] 
> colnames(df4) <- cn[11:12] 
> 
> #working example for 1 out of 3 matches 
> #adding the first row of the lone data frame "df4" containing 
> #Var11 and Var12 to df1. Result is as desired 
> newdf1 <- c(df1,df4[1,]) 
> as.data.frame(newdf1) 
     Var1  Var2  Var3  Var4  Var5  Var6  Var7  Var8  Var9 Var10 Var11 Var12 
1 52.37538 48.47529 41.93258 45.93547 41.71611 58.86811 40.70888 41.87981 56.80464 49.73488 5.233276 4.417211 
2 51.90261 61.72404 44.96621 48.59473 51.61673 51.07525 55.02000 43.48264 34.03446 48.93913 5.233276 4.417211 
3 39.85056 48.72688 49.93816 60.41899 54.90524 56.84387 53.92486 55.92178 50.81779 66.03640 5.233276 4.417211 
4 41.61915 53.22312 47.96660 50.79573 34.98073 41.81004 46.43976 45.49678 32.48257 58.65475 5.233276 4.417211 
5 58.52455 39.70007 51.26386 39.92583 47.08723 31.41743 45.34423 63.06964 61.07181 55.44908 5.233276 4.417211 
> df4 
    Var11 Var12 
1 5.233276 4.417211 
2 5.309388 5.375850 
3 6.342876 5.318077 

提供:)

PS任意の助け本当に感謝:ここに私の最初のポストを、私はそれが読める願っています。

答えて

1

数字の入った名前で囲まれた多数のdata.framesを持つことは、「R方法」を実行していないという兆候です。物事がよく見えないという別の兆候は、assign()の使用です。あなたは一般的にRのリストにそのようなオブジェクトを保持する必要があります。

しかし、あなたが、私たちは、リストでそれらを返すために自分の名前とmget()を取得するためにls()を使用することができます

df1<-data.frame(id=1:10, a=1:10) 
df2<-data.frame(id=1:10, b=1:10) 
df3<-data.frame(id=1:10, c=1:10) 

lf<-data.frame(x=1:3, y=1:3) 

、このようなデータフレームを持っているとしましょう。次に、リスト内の各data.frameをlfの各ローにMap()cbind()と使用できます。これは、あなたが望んでいた内容を正確に把握するのは難しいreproducible exampleの欠如を考えると、すべての更新data.frames

Map(function(a,b) {row.names(b)<-NULL; cbind(a, b)} , 
    mget(ls(pattern="^df\\d+")), 
    split(lf, 1:nrow(lf)) 
) 

で新しいリストを返します。小さな入力データセットを提供し、必要な出力を表示する必要があります。これにより、ソリューションのテストが容易になります。

+0

少し上手く私の問題を解決したいと考えて、例を追加しました。 – Susu

+0

@スス私のソリューションは、あなたの例で示したものとまったく同じであると確信しています。結果を 'newdf <-Map(...)'で保存すれば、 'newdf [[1]]'などで取得できます。 – MrFlick

関連する問題