在一個函式中,我試圖為資料框創建一個附加列,該列對應于函式條目中列出的其他幾個列中的最小值。
一個最小的資料集是:
C1 <- c(1, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0)
C2 <- c(0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 1, 1, 0, 1, 0)
C3 <- c(0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1)
C4 <- c(0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0)
Data <- data.frame(C1, C2, C3, C4)
如果我想要函式之外的 C1、C2 和 C4 的最小值,我會呼叫:
Data$Min <- pmin(Data$C1, Data$C2, Data$C4)
然而,在函式內部,我掙扎并且只能產生這個:
min.col <- function(data, conditions){
data$Min <- pmin(data[[conditions]]) # [[ ]] is the wrong way to refer to the conditions, but I do not find how to
# After that, I go on here with my function based on the column data$Min but it is not relevant for the present problem.
}
被稱為:
min.col(data, conditions=c("C1", "C2", "C4"))
有人可以幫忙嗎?提前謝謝了!
uj5u.com熱心網友回復:
這些僅使用基礎 R。
1)我們可以這樣使用do.call("pmin", ...)。
f <- function(data, cols) transform(data, min = do.call("pmin", data[cols]))
f(Data, c("C1", "C2", "C4"))
給予:
C1 C2 C3 C4 min
1 1 0 0 0 0
2 0 1 1 0 0
3 1 1 0 0 0
4 1 1 0 1 1
5 0 0 0 0 0
6 0 1 0 0 0
7 1 0 1 0 0
8 1 0 1 1 0
9 0 0 1 0 0
10 0 1 0 0 0
11 0 1 1 0 0
12 1 1 1 1 1
13 1 0 0 0 0
14 0 1 0 0 0
15 0 0 1 0 0
2)或使用apply
f2 <- function(data, cols) transform(data, min = apply(data[cols], 1, min))
f2(Data, c("C1", "C2", "C4"))
3)或Reduce
f3 <- function(data, cols) transform(data, min = Reduce(pmin, data[cols]))
f3(Data, c("C1", "C2", "C4"))
4)如果 data[cols] 只有 0 和 1 個單元格,那么如果我們計算一行中 0 的數量,那么如果總和為 0,則最小值應為 1,否則最小值應為 0。請注意,當強制為邏輯值時,0 被視為 FALSE,任何其他數字都被視為 TRUE:
f4 <- function(data, cols) transform(data, min = !rowSums(!data[cols]))
f4(Data, c("C1", "C2", "C4"))
uj5u.com熱心網友回復:
我們可以使用tidyverse包中的一些功能非常快速地完成此操作。這里的關鍵是不要使用引號,將列包裹在 中vars,然后!!!在函式中使用三連字符進行分隔和計算。
library(tidyverse)
min.col <- function(data, conditions){
data %>%
mutate(Min = pmin(!!!conditions))
}
min.col(Data, vars(C1, C2))
#> C1 C2 C3 C4 Min
#> 1 1 0 0 0 0
#> 2 0 1 1 0 0
#> 3 1 1 0 0 1
#> 4 1 1 0 1 1
#> 5 0 0 0 0 0
#> 6 0 1 0 0 0
#> 7 1 0 1 0 0
#> 8 1 0 1 1 0
#> 9 0 0 1 0 0
#> 10 0 1 0 0 0
#> 11 0 1 1 0 0
#> 12 1 1 1 1 1
#> 13 1 0 0 0 0
#> 14 0 1 0 0 0
#> 15 0 0 1 0 0
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/330885.html
上一篇:使用字典中的所有引陣列合評估函式
