2016-09-21 7 views
1

私は32のデータフレームを持っているので、私はいくつかの他のデータフレームの列の合計を含む新しいデータフレームをすべてのデータフレームで取得する必要があります。新しいデータフレームcointaning別の列の合計R

は私がより明確にする2つのデータフレームとの例を書いてみましょう:私は取得したい何

df1 <- data.frame(1:5,2:6,3:7, 4:8) 
colnames(df1) <- c("one", "two", "three", "four") 
df2 <- data.frame(4:8, 5:9, 6:10, 7:11) 
colnames(df2) <- c("one", "two", "three", "four") 

は、列1、列1およびデータフレームの3の合計であるデータフレームdf1a、あるdf1 、列2は同じで、変化しません。また、私は出力が最初に配置されているその列4を希望します。

私はこのコードを書くことができます知っている:

df1a <- data.frame(df1$four, df1$one+df1$three, df1$two) 
colnames(df1a) <- c("four", "1+3", "two") 

しかし、私の実際のデータに私は20列それぞれで作られた32のデータフレームを持っているので、すべてのデータフレームのために書くために私には非常に長いようです。

私はリストに入れて:

listdf <- list(df1, df2) 

私は、いくつかのループまたは適用で何かを適用するために持っていると思うが、私はどのように理解することはできません。

私はdf1aにDF1から取得したいものの例:

df1 
    one two three four 
1 1 2  3 4 
2 2 3  4 5 
3 3 4  5 6 
4 4 5  6 7 
5 5 6  7 8 

df1a <- data.frame(df1$four, df1$one+df1$three, df1$two) 
colnames(df1a) <- c("four", "1+3", "two") 
df1a 
    four 1+3 two 
1 4 4 2 
2 5 6 3 
3 6 8 4 
4 7 10 5 
5 8 12 6 
+1

のリストを扱う上で[このポスト](http://stackoverflow.com/questions/17499013/how-do-i-make-a-list-of-data-frames)でグレゴールの答えを参照してください。 data.frames。そこに私の答えは、data.framesの名前付きリストを取得するための素敵なショートカットを提供します。 – lmo

+1

@RonakShah、例を追加しました – Francesco

答えて

1

は、コード内のコメントを参照してください。本質的には、各data.frameで実行する必要がある関数を記述し、lapplyまたはsapplyを使用して、各data.frameでこの操作を実行します。これらのdata.framesをリストに入れるので、lapplyまたはsapplyの使用は非常に便利です。

df1 <- data.frame(1:5,2:6,3:7, 4:8) 
colnames(df1) <- c("one", "two", "three", "four") 
df2 <- data.frame(4:8, 5:9, 6:10, 7:11) 
colnames(df2) <- c("one", "two", "three", "four") 

# Create a function which holds commands to be used on a single data.frame 
operationsPerDF <- function(x) { 
    data.frame(four = x$four, onepthree = x$one + x$three, two = x$two) 
} 

# You can manually gather data.frames into a list. 
lapply(list(df1, df2), FUN = operationsPerDF) 

# Or find data.frames by a pattern, collect them into a list... 
list.dfs <- sapply(ls(pattern = "df"), get, simplify = FALSE) 

# ... and perform the above operation, one data.frame at a time 
lapply(list.dfs, FUN = operationsPerDF) 

$df1 
    four onepthree two 
1 4   4 2 
2 5   6 3 
3 6   8 4 
4 7  10 5 
5 8  12 6 

$df2 
    four onepthree two 
1 7  10 5 
2 8  12 6 
3 9  14 7 
4 10  16 8 
5 11  18 9 
+0

私は関数を適用し、 'lapply(nameofmylist、FUN = operationsPerDF)'を使用しましたが、リスト内のデータフレームの名前は失います。損失を避ける方法はありますか? – Francesco

+0

@Francescoどのように 'nameofmylist'を構築しますか?これはおそらく名前を消去するステップです。 –

+0

このように: 'listdf < - list(df1、df2)'。多分私はそれらの名前を付けるべきですか? – Francesco

関連する問題