首页 > 解决方案 > 如何将一列减去数据框中的其他列

问题描述

我有一个由 1000 行和 156 列组成的数据框。我试图将第一列减去接下来的 38 列,然后将第 39 列减去接下来的 38 列,依此类推,但我找不到办法。我只使用ncdf4,没有别的。像这样的东西

C1  C2  C3  C4  C5  C6  C7  C8
1   2   3   4   5   6   4   5
3   4   6   5   4   3   2   7

我希望它是

C1  C2  C3  C4  C5  C6  C7  C8
0   1   2   3   4   5   3   4
0   1   3   2   1   0  -1   4

逻辑将是前 38 列 - 第一列

专栏 39:77 - 专栏 39

等等。

标签: rframesubtractionncdf4

解决方案


您还可以在没有任何循环的情况下执行以下操作:

# sample data frame
df <- data.frame(matrix(data = seq(1,316),ncol = 158))

# split the data frame into list of data frame having columns
# 1 to 38, 39 to 77 and so on
df <- split.default(df, gl(round(ncol(df)/38),k = 38))

# subtract the last column from each
df <- do.call(cbind, lapply(df, function(f) f - f[,ncol(f)]))
colnames(df) <- paste0('C', seq(1,158))

print(head(df))

   C1  C2  C3  C4  C5
1 -74 -72 -70 -68 -66
2 -74 -72 -70 -68 -66

推荐阅读