我想知道是否有一种简单的方法可以减去奇数行甚至偶数行。基本上是:第一行(A1)减去第二行(A2),第三行(A3)减去第四行(A4)。
test <- structure(list(Well_positions = c("A1", "A2", "A3", "A4", "A5",
"A6", "A7", "A8", "A9", "A10", "A11", "A12"), Layout = c("SM1_1",
"BA1", "SM1_2", "BB1", "SM1_3", "BC1", "SM1_4", "BD1", "SM1_5",
"BE1", "ST1_1", "BF1"), Abs_18 = c(0.20585, 0.16226, 0.1695,
0.11268, 0.16271, 0.11269, 0.23633, 0.18636, 0.22289, 0.18856,
0.11974, 0.059685), FL_18 = c(3669, 51, 3578, 52, 3594, 51, 5378,
55, 5104, 54, 825, 58)), .Names = c("Well_positions", "Layout",
"Abs_18", "FL_18"), row.names = c(NA, -12L), class = c("tbl_df",
"tbl", "data.frame"))
到目前为止,我只有一个主意来创建两个单独的数据帧:
library(dplyr)
data_s <- filter(test, grepl("S", Layout))
data_b <-filter(test, grepl("B", Layout))
然后,我想保留
data_s
中的“Well_positions”和“Layout”,并获取其余各列(data_s[,3:4] - data_b[,3:4]
)的区别。但是我不知道如何保留前两列...我可以做的是从data_b中添加两列,然后执行减法运算,但是当我有更多列时,它会变得非常混乱。 最佳答案
使用dplyr
的解决方案。
library(dplyr)
test2 <- test %>%
group_by(grp = (row_number() - 1) %/% 2) %>%
summarise_all(funs(ifelse(is.numeric(.), first(.) - last(.), first(.)))) %>%
ungroup() %>%
select(-grp)
test2
# A tibble: 6 x 4
Well_positions Layout Abs_18 FL_18
<chr> <chr> <dbl> <dbl>
1 A1 SM1_1 0.043590 3618
2 A3 SM1_2 0.056820 3526
3 A5 SM1_3 0.050020 3543
4 A7 SM1_4 0.049970 5323
5 A9 SM1_5 0.034330 5050
6 A11 ST1_1 0.060055 767
关于r - 行减法(A1-A2,A3-A4等),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46648753/