[英]R get new table
我有一個包含兩列 A 和 B 的表。我想創建一個添加了兩個新列的新表:X 和 Y。
X 列將包含來自 A 列的值,但要執行除法。 來自第一行(來自 A 列)的值除以來自 A 列中第二行的值,因此對於所有后續行,例如第三行除以第四行等。
Y 列將包含 B 列中的值,但要執行除法。 來自第一行(來自 B 列)的值除以來自 B 列中第二行的值,因此對於所有后續行,例如第三行除以第四行等。
到目前為止,我為此使用了 Excel。 但是現在如果可能的話,我需要它以函數的形式在 R 中使用,以便我可以輕松地重用這段代碼。 我還沒有在 R 中做到這一點,所以我正在尋求幫助。
示例數據:
structure(list(A = c(2L, 7L, 5L, 11L, 54L, 12L, 34L, 14L, 10L,
6L), B = c(3L, 5L, 1L, 21L, 67L, 32L, 19L, 24L, 44L, 37L)), class = "data.frame", row.names = c(NA,
-10L))
樣本結果:
structure(list(A = c(2L, 7L, 5L, 11L, 54L, 12L, 34L, 14L, 10L,
6L), B = c(3L, 5L, 1L, 21L, 67L, 32L, 19L, 24L, 44L, 37L), X = c("",
"0,285714286", "", "0,454545455", "", "4,5", "", "2,428571429",
"", "1,666666667"), Y = c("", "0,6", "", "0,047619048", "", "2,09375",
"", "0,791666667", "", "1,189189189")), class = "data.frame", row.names = c(NA,
-10L))
您可以使用dplyr
across
cross 和lag
(結合模數來選擇每隔一行):
library(dplyr)
df |> mutate(across(c(A, B), ~ ifelse(row_number() %% 2 == 0, lag(.) / ., NA), .names = "new_{.col}"))
如果您想要一個字符向量,請將NA
更改為""
。
輸出:
A B new_A new_B
1 2 3 NA NA
2 7 5 0.2857143 0.60000000
3 5 1 NA NA
4 11 21 0.4545455 0.04761905
5 54 67 NA NA
6 12 32 4.5000000 2.09375000
7 34 19 NA NA
8 14 24 2.4285714 0.79166667
9 10 44 NA NA
10 6 37 1.6666667 1.18918919
功能:
ab_fun <- function(data, vars) {
data |>
mutate(across(c(A, B), ~ ifelse(row_number() %% 2 == 0, lag(.) / ., NA), .names = "new_{.col}"))
}
ab_fun(df, c(A,B))
更新了新數據和正確的代碼。 + 功能
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.