我想用兩個串列進行迭代。
對于一個案例,我有一個資料框架df1和一個向量v1。
我的可重復的例子如下。
我的可重復的例子如下。
df1 <- data. frame(n1 = c(2。 2,0),
n2 = c(2。 1,1),
n3 = c(0。 1,1),
n4 = c(0。 1,1))
v1 < - c(1。 2,3)
現在,我使用這段代碼為每一行計算出一個值(ses.value)
x < - (v1 - apply(df1, 1。 平均))/應用(df1。 1,sd)
假設我們將有一個由多個資料幀組成的串列l1和一個向量串列l2(每個串列有相同數量的元素)現在,我想通過使用上述代碼為這些串列運行一個回圈(l1的元素必須與l2的元素在同一位置)。
# 3 dataframes and 3 vectors
df1 <- data. frame(n1 = c(2。 2,0)。 n2 = c(2, 1,1)。 n3 = c(0, 1,1)。 n4 = c(0, 1,1))
df2 <- data. frame(n1 = c(1。 6,0)。 n2 = c(2。 1,8)。 n3 = c(0。 2,1)。 n4 = c(0, 7,1))
df3 <- data. frame(n1 = c(1。 6,0)。 n2 = c(9, 1,5)。 n3 = c(4。 2,1)。 n4 = c(0, 7,2))
v1 < - c(1。 2,3)
v2 < - c(2。 3,4)
v3 < - c(4。 5,6)
# list 串列
l1 < - list(df1,df2,df3)
l2 < - list(v1,v2,v3)
由于我的串列太大,使用for loop可能不是一個好主意,有沒有建議使用lapply或類似的東西?
uj5u.com熱心網友回復:
由于你的串列顯然很大,你可能會受益于rowMeans2和rowSds的matrixStats包。
library(matrixStats)
Map(/span>(x, y) (y - rowMeans2(as. 矩陣(x))。 標點符號">) / rowSds(as. 矩陣(x))。 l1, l2)
# [[1]]/span>
# [1] 0.0 1.5 4.5
#
# [[2]]
# [1] 1.3055824 -0.3396831 0.4057513
#
# [[3]]
# [1] 0.1237179 0.3396831 1.8516402
資料:
l1 < - list(structure(list(n1 = c(2。 2, 0)。 n2 = c(2。 1。 1)。 n3 = c(0,
1, 1)。 n4 = c(0。 1, 1))。 class = "data. frame",行。 names = c(NA,)
-3L))。 結構(list(n1 = c(1。 6, 0)。 n2 = c(2。 1。 8)。 n3 = c(0,
2, 1)。 n4 = c(0。 7, 1))。 class = "data. frame",行。 names = c(NA,)
-3L))。 結構(list(n1 = c(1。 6, 0)。 n2 = c(9。 1。 5)。 n3 = c(4,
2, 1)。 n4 = c(0。 7, 2))。 class = "data. frame",行。 names = c(NA,)
-3L)))
l2 < - list(c(1。 2。 3)。 c(2。 3, 4)。 c(4。 5, 6))
uj5u.com熱心網友回復:
我們可以使用Map來回圈每個list的相應元素,然后根據OP的代碼來進行計算
Map(function(x, y) (y - apply(x。 1。 平均))/應用(x。 1,sd)。 l1, l2)
輸出
[[1]]
[1] 0.0 1.5 4.5
[[2]]
[1] 1. 3055824 -0.3396831 0.4057513
[[3]]
[1] 0. 1237179 0.3396831 1.8516402
另外,如果資料集真的很大,可以從collapse中使用dapply,這樣更有效率
library(collapse)
Map(function(x, y) (y - dapply(x, MARGIN = 1,
FUN = fmean))/dapply(x, MARGIN = 1。 FUN = fsd), l1, l2>)
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/328917.html
標籤:
上一篇:在多行之間復制一個值R
