从数据帧中的奇数列中减去偶数列

zoe*_*zoe 2 r dataframe

我有一个数据帧(实际上我有170列(85对)和~8000行)

data <- data.frame(A = c(6,5,4,3), B = c(2,2,2,2), C = c(9,8,7,6), D = c(2,2,2,2))
Run Code Online (Sandbox Code Playgroud)

对于所有行,我想从第1列,第3列第4列等中减去第2列.

我想我需要尝试编写函数或以某种方式使用apply.

the*_*ail 6

R有一个矢量化操作来在一次调用中处理这种任务:

data[c(1,3)] - data[c(2,4)]
## or for every column until the end of the dataset
data[seq(1,ncol(data),2)] - data[seq(2,ncol(data),2)]
#  A C
#1 4 7
#2 3 6
#3 2 5
#4 1 4
Run Code Online (Sandbox Code Playgroud)

请参阅前面的讨论,了解许多有用的建议 - 为数据帧选择多个奇数或偶数列/行

您可以对此进行扩展,以便自动完成命名:

s <- seq(1,ncol(data),2)
data[paste0(names(data[s]), "minus", names(data)[-s])] <- data[s] - data[-s]
data

#  A B C D AminusB CminusD
#1 6 2 9 2       4       7
#2 5 2 8 2       3       6
#3 4 2 7 2       2       5
#4 3 2 6 2       1       4
Run Code Online (Sandbox Code Playgroud)