我想知道如何在没有合并,聚合等的情况下将数据帧的给定行分配给另一个数据帧的给定列。例如,使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
非常感谢帮助!!! 干杯
答案 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