n列减法

时间:2017-12-13 08:49:23

标签: r loops dataframe data.table

在N数或列式减法中需要帮助,下面是输入数据帧中的列。

输入数据框:

A   B   C   D
1   4   6   2
3   3   3   4
1   2   2   2
4   4   4   4
5   2   3   2

预期产出:

A      B-A     C-B      D-C
1       3       2       -4
3       0       0       1
1       1       0       0
4       0       0       0
5       -3      1       -1

同样会有很多列到10个。

我可以编写2列代码:

代码:

df$(B-A) <- df$B - df$A
df$(C-B) <- df$C - df$B

依此类推...但是这应该是循环的,因为有近10到12列。请帮我。

3 个答案:

答案 0 :(得分:5)

这是一种执行此操作的矢量化方法,

cbind.data.frame(df[1], df[-1] - df[-ncol(df)])

给出,

  A  B C  D
1 1  3 2 -4
2 3  0 0  1
3 1  1 0  0
4 4  0 0  0
5 5 -3 1 -1

答案 1 :(得分:2)

这是一个指导性/教育学的直截了当的解决方案:

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

获取模式:

cbind(df[1], df[2] - df[1], df[3] - df[2], df[4] - df[3]) # solved

现在,在R中使用动态编程来完成(在一般情况下):

cbind(df[1], sapply(1:(ncol(df)-1), function(i) df[i+1] - df[i]))

输出:

  A  B C  D
1 1  3 2 -4
2 3  0 0  1
3 1  1 0  0
4 4  0 0  0
5 5 -3 1 -1

答案 2 :(得分:1)

使用nav ul li label {position: relative;} .pill-btn-no-item1, .pill-btn-no-item2 {left: auto; right: 20px;} 你也可以试试这个

apply()

输出:

cbind(df[1], t(apply(df, 1, diff)))