tim*_*kas 6 loops r anonymous-function dataframe
我试图在数据框中生成新变量,这些变量以数据框中的两个(或更多)其他变量为条件.我相信R中的循环函数(即lapply,sapply等)对于此目的是有用且有效的.然而,根据我的方法,有些事情是不对的,我无法弄清楚是什么.
M <- data.frame(x=c("A", "A", "B", "B"), y=c(1,2,1,2))
Run Code Online (Sandbox Code Playgroud)
使用这个数据框,我想生成一个新的列z,包含如果是x == "A"
和,则为TRUE的逻辑y == 1
.以下代码是我能在这里得到的最好的代码,但似乎只是评估我的第一个条件.
M$z <- sapply(M$x, function(x,y) if((x == "A") && (y == 1)) T else F, M$y)
Run Code Online (Sandbox Code Playgroud)
看看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
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
我认为更简单的方法是
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
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4953 次 |
最近记录: |