我有這樣分裂根據序列
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)))
的值,但那時我不知道如何着手。
非常感謝
我有這樣分裂根據序列
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)))
的值,但那時我不知道如何着手。
非常感謝
你需要做的主要事情是使用split.default
代替split
,爲split
的data.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
嗨,相反,如果我在每一行都有NA值?在這種情況下,我不想將它們列入平均水平。非常感謝 – user3036416
@ user3036416,請參閱編輯。另外,請注意我平均爲1米,(米+ 1)-2米,(2米+ 1)-3米,這將產生22列的結果,而不是你期望的365。這是固定的。此外,通過使用'na.rm'和'mean',現在NA值將被排除在平均值之外(因此,如果您的行中有1個NA值用於列1,366,731等,則將計算平均值取決於21個值而不是22個)。 – BrodieG
你對組列的含義是什麼?你想要的物體是什麼樣的? – Rufo
我的意思是對於每一行我想平均對應的列的值,我將列365添加到列索引。所以我想爲每行獲得22值 – user3036416
@ user3036416花費你的時間並努力提供一個[可重現的例子](http://stackoverflow.com/q/5963269/1315767),以便我們可以幫助你。 –