【发布时间】:2018-06-20 01:30:56
【问题描述】:
我正在尝试编写一个循环遍历数据帧行并使用有关其他行的信息来确定每个循环的输出的函数。
考虑以下数据框,它表示具有经度坐标、纬度坐标和表示他们是否生病的值的人:
game.mat<-as.data.frame(matrix(0, nrow = 100, ncol = 3))
colnames(game.mat)<-c("PosX","PosY","Sick")
game.mat[,"PosX"]<-sample(x = c(1:100), 100, replace = TRUE)
game.mat[,"PosY"]<-sample(x = c(1:100), 100, replace = TRUE)
game.mat[,"Sick"]<-sample((c(rep(0,8),rep(1,2))),100,replace=TRUE)
在基线时,少数人会生病。我的功能是感染与病人有相邻 x-y 坐标的人(因此任何与病人相邻的人)。我考虑在 ifelse 语句中嵌入这样的函数:
search_sick<-function(d,corx,cory){
d2<-d[d$PosX<corx+2&d$PosX>corx-2&d$PosY<cory+2&d$PosY>cory-2,]
if(sum(d2$Sick>0)){
d$Sick<-1
} else{
d$Sick<-0
}
}
但它会让每个人都生病,也许是因为如果有人在病人旁边,它会给每个人一个 1 的值。我还考虑过使用应用功能。但是根据我对 apply 的了解,它一次只能在一行内运行,因此无法检索有关其他行是否具有相邻坐标值的信息。
我希望这是有道理的。很高兴提供任何其他信息。
【问题讨论】:
-
我不确定我是否理解您尝试使用的逻辑。
corx和cory是否意味着用户输入函数的空间中的单个点?或者您想同时搜索所有感染者?或者是其他东西?我已经为下面的第一种情况提供了解决方案,但如果这不是您想要的,请告诉我。 -
我想同时搜索所有感染者。这就是我遇到的问题。
标签: r if-statement apply