在Dataframe中计算,保留第一行作为参考

问题描述 投票:0回答:3

对于N列,我的第一行是添加以下行的参考值。

数据

A   B   C   D
3   5   1   2

1   4   5   3
2   2   2   4
3   1   3   1
4   3   1   2

计算如下:

  • 3,是添加的参考值,其中3应添加到1,2,3和4,类似地5是参考值 - 添加到4,2,1,3然后1是参考值添加到5,2,3,1等......直到n列。 1 + 3 4 + 5 5 + 1 3 + 2 2 + 3 2 + 5 2 + 1 4 + 2 3 + 3 1 + 5 3 + 1 1 + 2 4 + 3 3 + 5 1 + 1 2 + 2

预期产量:

A   B   C   D
4   9   6   5
5   7   3   6
6   6   4   3
7   8   2   4

请帮忙。谢谢。

r dataframe matrix data.table apply
3个回答
5
投票

也许就是这样:

c(mydf[1, ]) + mydf[-1, ]
##   A B C D
## 2 4 9 6 5
## 3 5 7 3 6
## 4 6 6 4 3
## 5 7 8 2 4

开始data.frame

mydf <- structure(list(A = c(3L, 1L, 2L, 3L, 4L), B = c(5L, 4L, 2L, 1L, 
    3L), C = c(1L, 5L, 2L, 3L, 1L), D = c(2L, 3L, 4L, 1L, 2L)), .Names = c("A", 
    "B", "C", "D"), row.names = c(NA, 5L), class = "data.frame")

2
投票

我们可以做的

(df1[1,][col(df1)] + df1)[-1,]
#  A B C D
#2 4 9 6 5
#3 5 7 3 6
#4 6 6 4 3
#5 7 8 2 4

0
投票

如果您尝试使用新值替换初始数据框中的值,则可以执行以下操作:

df <- data.frame(c(3,1,2,3,4), c(5,4,2,1,3), c(1,5,2,3,1), c(2,3,4,1,2))
names(df) <- c("A", "B", "C", "D")

for (i in 2:nrow(df)) {
  for (j in 1:ncol(df)) {
    df[i,j] <- df[1,j] + df[i,j] 
  }
}

这可能是矢量化并且运行得更快,如果您有一个非常大的数据帧,这将有所帮助,但如果您需要一个快速而肮脏的解决方案,它将起作用。

输出:

  A B C D
1 3 5 1 2
2 4 9 6 5
3 5 7 3 6
4 6 6 4 3
5 7 8 2 4

希望这有用!

© www.soinside.com 2019 - 2024. All rights reserved.