我是R的新人(我使用R-studio),我必须分析一个大数据框(10个观察的60个变量)。我的数据框中有一个列名称,其中有许多不同的动物物种。我的工作目标是获得8种不同物种的结果,所以我必须分别在那里工作。 我开始构建不同的子集(比如我在学校学习)和很棒的包(特别感谢dplyr和tdyr)。但是现在我必须对8个物种中的每一个重复许多相同(或几乎相同)的动作,所以我花了很多时间来复制/粘贴,当我犯了错误时,我必须验证并改变数千行的错误。 然后我尝试了解循环和应用族函数。但我不能做点好事。
我用传统方式(组织数据)对一个物种做了一个动作的例子:
espece_td_a <- subset(BDD, BDD$espece == "espece A" & BDD$placette =="TOTAL")%>%
select(code_site,passage,adulte)%>%
spread(passage, adulte)
espece_td_a <- full_join(B.irene_td_a, BDD_P3_TOT_site)
espece_td_a <- replace(espece_td_a, is.na(espece_td_a),0)
espece_td_a$P1[B.irene_td_a$P1>0]<-1
espece_td_a$P2[B.irene_td_a$P2>0]<-1
espece_td_a$P3[B.irene_td_a$P3>0]<-1
write.csv(espece_td_a, file = "espece_td_a.csv")
BDD是我的数据框架。
BDD_P3_TOT_site是使用BDD构建的向量(或具有1列多行的数据帧?)
这种传统方式&#34;为我工作,但我必须做很多次这样的事情!这需要很多时间......
然后我试着&#34;申请&#34;这有功能:
f <- function(x)
{
select(code_site, passage, adulte)%>%
spread(x, x$passage, x$adulte)%>%
full_join(x, BDD_P3_TOT_site) -> x
x <- replace(x, is.na(x),0)
x$P1[x$P1>0]<-1
x$P2[x$P2>0]<-1
x$P3[x$P3>0]<-1
}
我希望将此函数应用于我的lapply数据集(列表中有8种):
l <- c("espece_a","espece_b","espece_c")
lapply(l,f(x))
问题:
如果我想把我的物种带入BDD,我知道这是一个错误的配方。
该功能不想工作: 我已经制作了8个子集(对于我感兴趣的每个物种) 在我的全球环境中:espece_a; espece_b ...
然后我想把我的子集逐个放入我的函数中:
> f(espece_a)
选择_(。data,.dots = lazyeval :: lazy_dots(...))出错:显示回溯 object&#39; code_site&#39;找不到重新运行调试
我希望我的桌子出现在我的Globlal env中,其名称能让我识别它(例如:&#34; espece_td_a&#34;)
答案 0 :(得分:0)
您有3个与使用lapply
相关的问题:
x
函数的末尾返回对象f
:l
应该是数据框列表,而不仅仅是数据框名称的向量,即l <- list(espece_a,espece_b,espece_c)
lapply
与现有功能一起使用时,您只需传递该功能的名称,即lapply(l,f)
希望这可以解决您的问题。
答案 1 :(得分:0)
我解决了功能问题:
f <- function(X){
X <- select(X, code_site, passage, adulte)%>%
spread(passage, adulte)
X <- full_join(X, BDD_P3_TOT_site)
X <- replace(X, is.na(X),0)
X$P1[X$P1>0]<-1
X$P2[X$P2>0]<-1
X$P3[X$P3>0]<-1
X <- return(X)
}
测试&lt; - f(espece_a)