2014-02-14 86 views
-1

我有這樣分裂根據序列

V1 V2 V3 V4 V5 ... V8030 
2 4 5 4 16 ... 2 
. 
. 
. 

用NcoI = 8030數據幀的數據幀。對於每一行,我希望將每一列與我將列365添加到列索引的列進行分組。

到目前爲止,我已經拆分數據幀列表中包含的每一行

list <- split(df, rep(1:nrow(df), each = ncol(df))) 

的值,但那時我不知道如何着手。

非常感謝

+0

你對組列的含義是什麼?你想要的物體是什麼樣的? – Rufo

+0

我的意思是對於每一行我想平均對應的列的值,我將列365添加到列索引。所以我想爲每行獲得22值 – user3036416

+0

@ user3036416花費你的時間並努力提供一個[可重現的例子](http://stackoverflow.com/q/5963269/1315767),以便我們可以幫助你。 –

回答

1

你需要做的主要事情是使用split.default代替split,爲splitdata.frame方法將行而不是列拆分。以下算法將生成一個數據幀,其中每列是(n, n + m, n + 2 * m + ... + k * m)等列的平均值,其中在您的情況下,m是365,k是22,而n屬於1:365

df.split <- split.default(df, rep(1:m, ncol(df)/m)) 
as.data.frame(lapply(df.split, apply, 1, mean, na.rm=T)) 

這假定您的數據框有m列的倍數。在你的情況下,m是365,而你的數據框確實有多個。以下是我編寫的一些測試數據:

set.seed(1) 
m <- 5 # 365 in your case 
k <- 3 # 22 in your case (8030/365) 
df <- as.data.frame(replicate(k * m, sample(1:100, 10), simplify=F)) 
names(df) <- paste0("V", 1:(k * m)) 
df[[1]][[5]] <- NA 
+0

嗨,相反,如果我在每一行都有NA值?在這種情況下,我不想將它們列入平均水平。非常感謝 – user3036416

+0

@ user3036416,請參閱編輯。另外,請注意我平均爲1米,(米+ 1)-2米,(2米+ 1)-3米,這將產生22列的結果,而不是你期望的365。這是固定的。此外,通過使用'na.rm'和'mean',現在NA值將被排除在平均值之外(因此,如果您的行中有1個NA值用於列1,366,731等,則將計算平均值取決於21個值而不是22個)。 – BrodieG