- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我无法在 Stack Overflow 上找到我的查询的解决方案。 This post is similar ,但我的数据集略有不同(而且重要的是)(因为我的分组变量中有多种“时间”度量)。
随着时间的推移,我对不同地点的生物体进行了观察。这些站点进一步聚合成更大的区域,因此我希望最终有一个可以在 ddply 中调用的函数来汇总地理区域内每个时间段的数据集。但是,我无法获得所需的功能。
问题
如何循环时间段并与前一个时间段进行比较,计算交集(即两个时间段内出现的“站点”数量)以及每个时间段内出现的数量总和?
玩具数据集:
time = c(1,1,1,1,2,2,2,3,3,3,3,3)
site = c("A","B","C","D","A","B","C","A","B","C","D","E")
df <- as.data.frame(cbind(time,site))
df$time = as.numeric(df$time)
我的功能
dist2 <- function(df){
for(i in unique(df$time))
{
intersection <- length(which(df[df$time==i,"site"] %in% df[df$time==i- 1,"site"]))
both <- length(unique(df[df$time==i,"site"])) + length(unique(df[df$time==i-1,"site"]))
}
return(as.data.frame(cbind(time,intersection,both)))
}
dist2(df)
我得到了什么:
dist2(df)
time intersection both
1 1 3 8
2 1 3 8
3 1 3 8
4 1 3 8
5 2 3 8
6 2 3 8
7 2 3 8
8 3 3 8
9 3 3 8
10 3 3 8
11 3 3 8
12 3 3 8
我期望(希望!)实现的目标:
time intersection both
1 1 NA 4
2 2 3 7
3 3 3 8
一旦我有了一个工作函数,我想在整个数据集上将它与 ddply 一起使用来计算每个区域的这些值。
非常感谢您的指点、提示和建议!
我正在运行:
R version 3.1.2 (2014-10-31)
Platform: x86_64-apple-darwin13.4.0 (64-bit)
最佳答案
您可以使用table
函数确定每个网站每次出现的次数:
(tab <- table(df$time, df$site))
# A B C D E
# 1 1 1 1 1 0
# 2 1 1 1 0 0
# 3 1 1 1 1 1
通过一些简单的操作,您可以构建相同大小的表,其中包含网站在前一时间段内出现的次数:
(prev.tab <- head(rbind(NA, tab), -1))
# A B C D E
# NA NA NA NA NA
# 1 1 1 1 1 0
# 2 1 1 1 0 0
确定与上一次迭代相同的站点数量或上一次迭代中的唯一站点数量加上当前迭代中的唯一站点数量现在是简单的矢量化操作:
data.frame(time=unique(df$time),
intersection=rowSums(tab * (prev.tab >= 1)),
both=rowSums(tab >= 1) + rowSums(prev.tab >= 1, na.rm=TRUE))
# time intersection both
# 1 1 NA 4
# 2 2 3 7
# 3 3 3 8
因为这不涉及进行一堆涉及时间值对的交集
或唯一
调用,所以它应该比循环解决方案更有效:
# Slightly larger dataset with 100000 observations
set.seed(144)
df <- data.frame(time=sample(1:50, 100000, replace=TRUE),
site=sample(letters, 100000, replace=TRUE))
df <- df[order(df$time),]
josilber <- function(df) {
tab <- table(df$time, df$site)
prev.tab <- head(rbind(NA, tab), -1)
data.frame(time=unique(df$time),
intersection=rowSums(tab * (prev.tab >= 1)),
both=rowSums(tab >= 1) + rowSums(prev.tab >= 1, na.rm=TRUE))
}
# dist2 from @akrun's solution
microbenchmark(josilber(df), dist2(df))
# Unit: milliseconds
# expr min lq mean median uq max neval
# josilber(df) 28.74353 32.78146 52.73928 40.89203 62.04933 237.7774 100
# dist2(df) 540.78422 574.28319 829.04174 825.99418 1018.76561 1607.9460 100
关于r - 计算比较连续时间段的值的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30442685/
我想使用 NetworkX Graph 对象作为 Python dict 中的键。但是,我不希望默认的比较行为(即通过对象的地址)。相反,我希望同构图是 dict 中相同元素的键。 此行为是否已在某处
这个问题已经有答案了: What is the most effective way for float and double comparison? (33 个回答) 已关闭 7 年前。 在您认为我
我正在学习 C 编程,为了练习,我找到了一个需要解决的任务。这有点像一个游戏,有人选择一个单词,其他人猜测字母。我必须检查有多少给定的单词可能是所选单词的正确答案。 输入: 3 3//数字 n 和 m
我两天前开始学习C,在做作业时遇到了问题。我们的目的是从字符数组中获取字符列表,并通过计算连续字符并将其替换为数字来缩短它。对“a4b5c5”说“aaaabbbbbccccc”。这是我到目前为止的代码
已关闭。此问题需要 debugging details 。目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and the
为什么我在 if 中的比较不起作用?答案应该是 8 但它返回 0。 function findMissing(missingArray){ var getArray = missing
我想知道为什么以下 JavaScript 比较会给出不同的结果。 (1==true==1) true (2==true==2) false (0==false==0) false (0==false)
我想知道是否有人可以帮助我完成这个程序。编写一个接受两个字符串的函数。该函数应该将这两个字符串与字典顺序上排在第一位的字符串组合起来。两个字符串之间应该有一个空格。在一行上打印结果字符串。在一行上打印
有谁知道一个免费的开源库(实用程序类),它允许您比较一个 Java bean 的两个实例并返回一个属性列表/数组,这两个实例的值不同?请发布一个小样本。 干杯 托马斯 最佳答案 BeanCompara
我是java新手。任何人都可以给出以下类声明的含义 public class ListNode, V> { K key; V value; ListNode next;
我需要用 C 语言计算和比较 3 种不同大小(100 * 100、1000 * 1000 和 10000 * 10000)的 2 个矩阵相乘的执行时间。我编写了以下简单代码来为 1000 * 1000
当我在 ACCESS 2007 中运行以下 SQL 时 Select Location, COUNT(ApartmentBuildings) AS TotalIBuildingsManaged Fro
根据我对互斥锁的了解——它们通常提供对共享资源的锁定功能。因此,如果一个新线程想要访问这个锁定的共享资源——它要么退出,要么必须不断轮询锁(并在等待锁时浪费处理器周期)。 但是,监视器具有条件变量,它
通常在编程中,不应该比较浮点数据类型是否相等,因为存储的值通常是近似值。 由于两个非整数 Oracle NUMBER 值的存储方式不同(以 10 为基数),是否可以可靠地比较它们是否相等? 最佳答案
使用 PowerShell 时,我们偶尔会比较不同类型的对象。一个常见的场景是 $int -eq $bool (即其中 0 -eq $false 、 0 -ne $true 和任何非零值仅等于真,但不
#include #define MAX 1000 void any(char s1[], char s2[], char s3[]); int main() { char string1[
我想比较两个日期。 从这两个日期中,我只使用 ToShortDateString() 获取日期组件, 如下所示。现在的问题是当我比较两个日期时。它的 throw 错误—— "Operator >= c
用户输入一个数字( float 或整数),并且它必须大于下限。 这是从 UITextField 获取数字的代码: NSNumberFormatter * f = [[NSNumberFormatter
我已经摆弄这段代码大约一个小时了,它让我难以置信。我认为解决方案相当简单,但我似乎无法弄清楚。无论如何,这里去。我制作了一个 javascript 函数来检查用户输入的字符,以便它只能接受 7 个字符
我不太明白为什么当我们在不覆盖 equals 的情况下比较具有相同类属性的两个实例时方法,它将给出 false .但它会给出 true当我们比较一个案例类的两个实例时。例如 class A(val
我是一名优秀的程序员,十分优秀!