将行分配给来自不同数据帧的列(lapply操作)

时间:2014-11-27 13:39:46

标签: r

我想知道如何在没有合并,聚合等的情况下将数据帧的给定行分配给另一个数据帧的给定列。例如,使df1的第1行与df的第1列相关联2,因此df 2第1列所进行的操作只取df 1第1行的值。

让我们创建df1(即V)和df2(即M):

V<-data.frame(A=c(2,1),B=c(4,2),C=c(6,3))
M<-data.frame(V1=rep(1,10),V2=rep(2,10)) 

#> V
   A B C
V1 2 4 6
V2 1 2 3

#> M
   V1 V2
1   1  2
2   1  2
3   1  2
4   1  2
5   1  2
6   1  2
7   1  2
8   1  2
9   1  2
10  1  2

让我们创建一个函数列表来传递M从V

中获取值
FUNS<-list(
F1<-function(x,A,B,C) A*x+B*x+C*x,
F2<-function(x,A,B,C) A*x-B*x-C*x
)

现在我想传递M上的函数列表,(但“理想情况下”我只想使用存储在第1行的第1列和第2行到第2列的值,不幸的是我没有找不到。

res1<-list(data.frame(matrix(,10,2)),data.frame(matrix(,10,2)))
for(i in seq_along(V[,1])){
res1[[i]]<-lapply(FUNS,function(f) f(M,V[i,1],V[i,2],V[i,3]))
}

返回: 1)在第一列和第二列上实现的第一个函数具有来自第1行的值集 2)在第1列和第1列上实现的第二功能。 2具有来自第1行的值集 3)在第1列和第1列上实现的第一个功能。 2具有来自第2行的值集 4)在第1列和第1列上实现的第二功能。 2来自第2行的值集

我想要的是: 1)在第1列上实现的第一和第二功能仅具有来自第1行的值 2)在第2列上实现第一和第二功能,仅使用第2行的值

> res1
[[1]]
[[1]][[1]]
   V1 V2
1  12 24
2  12 24
3  12 24
4  12 24
5  12 24
6  12 24
7  12 24
8  12 24
9  12 24
10 12 24

[[1]][[2]]
   V1  V2
1  -8 -16
2  -8 -16
3  -8 -16
4  -8 -16
5  -8 -16
6  -8 -16
7  -8 -16
8  -8 -16
9  -8 -16
10 -8 -16


[[2]]
[[2]][[1]]
   V1 V2
1   6 12
2   6 12
3   6 12
4   6 12
5   6 12
6   6 12
7   6 12
8   6 12
9   6 12
10  6 12

[[2]][[2]]
   V1 V2
1  -4 -8
2  -4 -8
3  -4 -8
4  -4 -8
5  -4 -8
6  -4 -8
7  -4 -8
8  -4 -8
9  -4 -8
10 -4 -8

非常感谢帮助!!! 干杯

1 个答案:

答案 0 :(得分:0)

尝试

 resN <- lapply(seq_len(nrow(V)), function(i) {
               v <- unlist(V[i,])
              lapply(seq_along(FUNS), function(i) 
                  FUNS[[i]](M, v[1], v[2], v[3])) })

res1

相同

修改

从描述中,您似乎想要这样:

  V1 <- as.data.frame(t(V))
  resN1 <- Map(function(.FUN,y,z) do.call(cbind,
               lapply(.FUN, function(x) x(y, z[1],z[2],z[3]))) ,
                                                list(FUNS), M, V1)
   resN1
   #[[1]]
  #     [,1] [,2]
  #[1,]   12   -8
  #[2,]   12   -8
  #[3,]   12   -8
  #[4,]   12   -8
  #[5,]   12   -8
  #[6,]   12   -8
  #[7,]   12   -8
  #[8,]   12   -8
  #[9,]   12   -8
 #[10,]   12   -8

 #[[2]]
 #     [,1] [,2]
 # [1,]   12   -8
 # [2,]   12   -8
 # [3,]   12   -8
 # [4,]   12   -8
 # [5,]   12   -8
 # [6,]   12   -8
 # [7,]   12   -8
 # [8,]   12   -8
 # [9,]   12   -8
 #[10,]   12   -8

相同
  M[,1]*V[1,1]+M[,1]*V[1,2]+M[,1]*V[1,3]
   #[1] 12 12 12 12 12 12 12 12 12 12

  M[,1]*V[1,1]-M[,1]*V[1,2]-M[,1]*V[1,3]
   #[1] -8 -8 -8 -8 -8 -8 -8 -8 -8 -8

  M[,2]*V[2,1]+M[,2]*V[2,2]+M[,2]*V[2,3]
   #[1] 12 12 12 12 12 12 12 12 12 12

  M[,2]*V[2,1]-M[,2]*V[2,2]-M[,2]*V[2,3]
  #[1] -8 -8 -8 -8 -8 -8 -8 -8 -8 -8