[英]using anonymous functions in R with multiple arguments
我試圖在數據框中生成新變量,這些變量以數據框中的兩個(或更多)其他變量為條件。 我相信R中的循環函數(即lapply,sapply等)對於此目的是有用且有效的。 然而,根據我的方法,有些事情是不對的,我無法弄清楚是什么。
M <- data.frame(x=c("A", "A", "B", "B"), y=c(1,2,1,2))
使用這個數據框,我想生成一個新的列z,包含如果x == "A"
和y == 1
則為TRUE的邏輯。 以下代碼是我能在這里得到的最好的代碼,但似乎只是評估我的第一個條件。
M$z <- sapply(M$x, function(x,y) if((x == "A") && (y == 1)) T else F, M$y)
看看mapply:
> M$z <- mapply(M$x,M$y, FUN=function(x,y) if((x == "A") && (y == 1)) T else F)
> M
x y z
1 A 1 TRUE
2 A 2 FALSE
3 B 1 FALSE
4 B 2 FALSE
Apropos,這與匿名函數無關,也與應用多個參數有關。 如果您對該函數進行了命名,則它仍然無法在任何單參數應用變體中使用。
另一種方法是按行進行ddply
,或將data.frame拆分為一個列表,每行都是一個單獨的條目。
這是transform
功能的任務
transform(M, z=ifelse((x == "A") & (y == 1), T, F))
x y z
1 A 1 TRUE
2 A 2 FALSE
3 B 1 FALSE
4 B 2 FALSE
我認為更簡單的方法是
M$z <- with(M, (x == "A") & (y == 1))
M
x y z
1 A 1 TRUE
2 A 2 FALSE
3 B 1 FALSE
4 B 2 FALSE
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.