r - 基于多列和多行条件的嵌套条件语句
问题描述
我正在尝试创建一个物种共现矩阵。我有一个数据框 bd
species <- c("A","A","F","H","D","E","C","D")
ID <- c("a1", "a2", "f1", "h1", "d1", "e1", "c1", "d2")
loc <- c(1,2,2,1,3,5,2,3)
time <- c("8:00","9:00","9:00","10:00","12:00","12:00","1:00","2:00")
cn <- c(1:8)
data.frame(species, ID, loc, time, cn)
species ID loc time cn
1 A a1 1 8:00 1
2 A a2 2 9:00 2
3 F f1 2 9:00 3
4 B b1 1 10:00 4
5 D d1 3 12:00 5
6 E e1 5 12:00 6
7 C c1 2 1:00 7
8 D d2 3 2:00 8
我想为共现创建一个有条件的“标准”,以便:
如果物种 [x] 在 +/- 1 个位置内和以下任一位置的 1 小时内被发现:
2种A | 1 种 A 和 1 种 B | 1种C
然后,将这些物种计为共同出现并粘贴(物种,ID,sep =“。”),如果不是,则为0。
我的代码看起来像这样:
instance <- as.data.frame(with(b.d, sapply(cn, function(x)
ifelse(abs(loc- loc[x]) <=1 & abs(difftime(time, time[x], units = "mins")) <= 60 &
((b.d$species[x]=="A" & b.d$species[x]=="A")
| (b.d$species[x]=="A" & b.d$species[x]=="B")
| b.d$species[x]=="C"),
paste(b.d$species,b.d$ID,sep="."),0))))
最后我想得到一个包含 cn(=8) 列和行数的矩阵,其中每列包含根据标准一起观察到的物种。所以,
V1 V2 V3 V4 V5 V6 V7 V8
1 A.a1 A.a1 A.a1 0 0 0 0 0
2 A.a2 A.a2 A.a2 A.a2 0 0 0 0
3 F.f1 F.f1 F.f1 F.f1 0 0 0 0
4 0 B.b1 B.b1 B.b1 0 0 0 0
5 0 0 0 0 0 0 0 0
6 0 0 0 0 0 E.e1 E.e1 E.e1
7 0 0 0 0 0 C.c1 C.c1 C.c1
8 0 0 0 0 0 D.d2 D.d2 D.d2
上面的代码适用于位置和时间标准,但物种[x] 标准不知何故搞砸了。只有第一个参数 (species[x]=="A") 被应用,其余的结果为零。我认为 sapply 函数正在逐行读取物种 [x] ,因此物种 [x] 一次只能代表 1 个物种,我该如何解决这个问题,以便每行都与其他多行进行检查?那么物种[x] 可以代表物种的组合吗?
谢谢你。
解决方案
推荐阅读
- node.js - cucumber.js 步骤定义失败,第一步出现超时错误
- ios - ios 11目标c中特定时间的每日安排本地通知
- angular - 使用 TypeScript 销毁静态变量、静态数组
- html - 使用网格列和网格行的网格布局
- android-vibration - 如何让 SmartWatch 从 HTML5 页面振动而无需干预
- symfony - Symfony 使用 HTTP 基本身份验证保护
- jquery - 如何使用 jquery ajax 仅从 json 请求和获取部分数据
- postgresql - 过滤超过 10 分钟的数据
- php - WordPress 网站中的 wp-config.php 自动将数据库配置更改为“测试”?
- apostrophe-cms - 更新撇号版本 2.67.0 时的问题