這是輸入:
book1 <- structure(
list(
ID = 1:10,
X1 = c(123L, 434L, 545L, 2323L, 54L,
23L, 54L, 24L, 53L, 44L),
X2 = c(132L, 44L, 543L, 335L, 53L,
33L, 42L, 24L, 35L, 55L),
X3 = c(12L, 143L, 533L, 344L, 232L,
5332L, 23L, 333L, 56L, 75L),
X4 = c(123L, 434L, 545L, 2323L,
54L, 23L, 54L, 24L, 53L, 44L),
X5 = c(132L, 44L, 543L, 335L,
53L, 33L, 42L, 24L, 35L, 55L),
X6 = c(12L, 143L, 533L, 344L,
232L, 5332L, 23L, 333L, 56L, 75L),
X7 = c(123L, 434L, 545L, 2323L,
54L, 23L, 54L, 24L, 53L, 44L),
X8 = c(132L, 44L, 543L, 335L,
53L, 33L, 42L, 24L, 35L, 55L),
X9 = c(12L, 143L, 533L, 344L,
232L, 5332L, 23L, 333L, 56L, 75L),
X10 = c(123L, 434L, 545L,
2323L, 54L, 23L, 54L, 24L, 53L, 44L),
X11 = c(132L, 44L, 543L,
335L, 53L, 33L, 42L, 24L, 35L, 55L),
X12 = c(12L, 143L, 533L,
344L, 232L, 5332L, 23L, 333L, 56L, 75L)
),
class = "data.frame",
row.names = c(NA,-10L)
)
這是我期待的輸入: 預期結果
我想我應該使用 for 回圈和 lag 功能,但不能讓它作業。我希望第一行保持不變,并從第二行開始獲得差異。
uj5u.com熱心網友回復:
我們可以使用diffwith rbind-diff獲得長度小于原始行數和rbind第一行的相鄰元素之間的列差異
rbind(book1[1,], diff(as.matrix(book1)))
-輸出
X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12
1 123 132 12 123 132 12 123 132 12 123 132 12
2 311 -88 131 311 -88 131 311 -88 131 311 -88 131
3 111 499 390 111 499 390 111 499 390 111 499 390
4 1778 -208 -189 1778 -208 -189 1778 -208 -189 1778 -208 -189
5 -2269 -282 -112 -2269 -282 -112 -2269 -282 -112 -2269 -282 -112
6 -31 -20 5100 -31 -20 5100 -31 -20 5100 -31 -20 5100
7 31 9 -5309 31 9 -5309 31 9 -5309 31 9 -5309
8 -30 -18 310 -30 -18 310 -30 -18 310 -30 -18 310
9 29 11 -277 29 11 -277 29 11 -277 29 11 -277
10 -9 20 19 -9 20 19 -9 20 19 -9 20 19
或者一個選項tidyverse
library(dplyr)
book1 %>%
mutate(across(everything(), ~ coalesce(.x -lag(.x), .x)))
uj5u.com熱心網友回復:
您還可以使用:
rbind(book1[1,], book1[-1,] - head(book1, -1))
X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12
1 123 132 12 123 132 12 123 132 12 123 132 12
2 311 -88 131 311 -88 131 311 -88 131 311 -88 131
3 111 499 390 111 499 390 111 499 390 111 499 390
4 1778 -208 -189 1778 -208 -189 1778 -208 -189 1778 -208 -189
5 -2269 -282 -112 -2269 -282 -112 -2269 -282 -112 -2269 -282 -112
6 -31 -20 5100 -31 -20 5100 -31 -20 5100 -31 -20 5100
7 31 9 -5309 31 9 -5309 31 9 -5309 31 9 -5309
8 -30 -18 310 -30 -18 310 -30 -18 310 -30 -18 310
9 29 11 -277 29 11 -277 29 11 -277 29 11 -277
10 -9 20 19 -9 20 19 -9 20 19 -9 20 19
uj5u.com熱心網友回復:
OP 請求的更新:
book1 %>%
mutate(id = row_number()) %>%
filter(id != 1) %>%
mutate(across(-id, ~ . - lag(., default = .[1] .[1]*-1))) %>%
bind_rows(book1 %>%
filter(row_number()==1)) %>%
mutate(id = replace_na(id, 1)) %>%
arrange(id)
X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 id
1 123 132 12 123 132 12 123 132 12 123 132 12 1
2 434 44 143 434 44 143 434 44 143 434 44 143 2
3 111 499 390 111 499 390 111 499 390 111 499 390 3
4 1778 -208 -189 1778 -208 -189 1778 -208 -189 1778 -208 -189 4
5 -2269 -282 -112 -2269 -282 -112 -2269 -282 -112 -2269 -282 -112 5
6 -31 -20 5100 -31 -20 5100 -31 -20 5100 -31 -20 5100 6
7 31 9 -5309 31 9 -5309 31 9 -5309 31 9 -5309 7
8 -30 -18 310 -30 -18 310 -30 -18 310 -30 -18 310 8
9 29 11 -277 29 11 -277 29 11 -277 29 11 -277 9
10 -9 20 19 -9 20 19 -9 20 19 -9 20 19 10
更新:如何避免我回答的第二個問題:
- 由@akrun 提供:
library(tidyr)
library(dplyr)
book1 %>%
mutate(across(everything(), ~ replace_na(. - lag(.), first(.))))
book1 %>%
mutate(across(everything(), ~ . - lag(., default = .[1] .[1]*-1)))
第一個答案:
這是另dplyr一種使用方式lag:
library(dplyr)
book1 %>%
mutate(across(everything(), ~ . - lag(., default = .[1]*2)),
across(everything(), ~ ifelse(row_number()==1, .*-1, .)))
X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12
1 123 114 234 123 114 234 123 114 234 123 114 234
2 311 -88 131 311 -88 131 311 -88 131 311 -88 131
3 111 499 390 111 499 390 111 499 390 111 499 390
4 1778 -208 -189 1778 -208 -189 1778 -208 -189 1778 -208 -189
5 -2269 -282 -112 -2269 -282 -112 -2269 -282 -112 -2269 -282 -112
6 -31 -20 5100 -31 -20 5100 -31 -20 5100 -31 -20 5100
7 31 9 -5309 31 9 -5309 31 9 -5309 31 9 -5309
8 -30 -18 310 -30 -18 310 -30 -18 310 -30 -18 310
9 29 11 -277 29 11 -277 29 11 -277 29 11 -277
10 -9 20 19 -9 20 19 -9 20 19 -9 20 19
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/487216.html
下一篇:用字典中的值求和(Python)
