将两个数据框中的所有行成对求和并保存到矩阵

发布于 2025-01-09 10:04:53 字数 899 浏览 0 评论 0原文

我有一个数据框 df1 和一个数据框 df 2

df1

colA colB ...
30    2   ...
3     100 ...
15    9   ...
..    ..  ...

df2

colA colB ...
10    200 ...
0     10  ...
55    1   ...
..    ..  ...

我想将 df1 的 colA 中的所有行与 df2 中的 colA 中的所有行相加,依此类推,对于其余列

输出:

df3

colA colB
40    202
3     110
70    10

我想将值填充到矩阵中 我写了这样的东西:

results <- matrix(NA, ncol=ncol(df1), nrow=nrow(df1))
rownames(results) <- rownames(df1)
colnames(results) <- colnames(df1)

for (i in seq(df1)) {
  tempCol1 <- df1[, i]
  for (row in rownames(results))
    for (j in seq(results)){
      results[row,j]<-sum(df1[row, tempCol1 ], 
                          df2[row, tempCol1 ])
}}

它给出了这个错误:

[<-(*tmp*, row, j, value = sum(a[row, tempCol1], b[row, tempCol1])) : 下标越界

I have a data frame df1 and a data frame df 2

df1

colA colB ...
30    2   ...
3     100 ...
15    9   ...
..    ..  ...

df2

colA colB ...
10    200 ...
0     10  ...
55    1   ...
..    ..  ...

I would like to sum all the rows in colA of df1 with colA in df2 and so on for the rest of the columns

Output:

df3

colA colB
40    202
3     110
70    10

I would like to fill up the values to a matrix
I have written something like this:

results <- matrix(NA, ncol=ncol(df1), nrow=nrow(df1))
rownames(results) <- rownames(df1)
colnames(results) <- colnames(df1)

for (i in seq(df1)) {
  tempCol1 <- df1[, i]
  for (row in rownames(results))
    for (j in seq(results)){
      results[row,j]<-sum(df1[row, tempCol1 ], 
                          df2[row, tempCol1 ])
}}

it give this error:

Error in [<-(*tmp*, row, j, value = sum(a[row, tempCol1], b[row,
tempCol1])) : subscript out of bounds

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

追风人 2025-01-16 10:04:53

将其制成矩阵并将它们相加。

直接添加两个 data.frame 也可以。

df1 = data.frame(colA = c(30, 3, 15), colB = c(2, 100, 9))
df2 = data.frame(colA = c(10, 0, 55), colB = c(200, 10, 1))
as.matrix(df1)+ as.matrix(df2)
df1+df2

> as.matrix(df1)+ as.matrix(df2)
     colA colB
[1,]   40  202
[2,]    3  110
[3,]   70   10

> df1+df2
  colA colB
1   40  202
2    3  110
3   70   10

Make it to a matrix and add up them.

Directly add two data.frame also works as well.

df1 = data.frame(colA = c(30, 3, 15), colB = c(2, 100, 9))
df2 = data.frame(colA = c(10, 0, 55), colB = c(200, 10, 1))
as.matrix(df1)+ as.matrix(df2)
df1+df2

> as.matrix(df1)+ as.matrix(df2)
     colA colB
[1,]   40  202
[2,]    3  110
[3,]   70   10

> df1+df2
  colA colB
1   40  202
2    3  110
3   70   10

悍妇囚夫 2025-01-16 10:04:53

您不必使用 for 循环 来解决此问题。只需将它们相加即可:

m = as.matrix(df1 + df2)

You do not have to use a for loop for this problem. Simply add them up:

m = as.matrix(df1 + df2)
风启觞 2025-01-16 10:04:53

我们可以做一个常规的 + ,它将保留矩阵格式并进行元素求和,下面的代码片段将完成工作

df1 <- data.frame (
  col1 = c(30, 3, 15),
  col2 = c(2, 100, 19)
)

df2 <- data.frame (
  col1 = c(30, 3, 15),
  col2 = c(2, 100, 19)
)

my_mat1 <- as.matrix(df1)
my_mat2 <- as.matrix(df2)

result = my_mat1 + my_mat2;

We can do a regular + which will preserve the matrix format and does the elementwise summation, below snippet will get the job done

df1 <- data.frame (
  col1 = c(30, 3, 15),
  col2 = c(2, 100, 19)
)

df2 <- data.frame (
  col1 = c(30, 3, 15),
  col2 = c(2, 100, 19)
)

my_mat1 <- as.matrix(df1)
my_mat2 <- as.matrix(df2)

result = my_mat1 + my_mat2;
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文