【问题标题】:Calculate and attach date-differences for equal strings in column计算并附加列中相等字符串的日期差异
【发布时间】:2019-12-18 21:49:47
【问题描述】:

我有一个数据框,其中包含一个名称变量,其中有不同的重复字符串,然后是一些数字变量和一个日期变量。首先,我试图找出是否可以为所有具有相同值的字符串创建一个新列,从每隔一个日期减去最低日期,因此有一个数值(天)。如果可能的话,我想将选择的数字变量之一与新的日变量相关联,但再次聚合在相同的字符串值或“人”上。关于这一点,我不介意在字符串的每一行中列出相关结果,因为无论如何我稍后都会聚合字符串。我知道这可能听起来很令人困惑,我希望我设置的小示例已经包含“正确”值,这将有助于理解我的问题。

names <- c("Richard", "Richard", "Mortimer", "Mortimer", "Mortimer", "Elizabeth", "Elizabeth")
num1 <- c(0.8, 0.1, 0.8, 0.9, 0.2, 0.2, 0.4)
num2 <- c(0.6, 0.3, 0.8, 0.8, 0.5, 0.5, 0.3)
num3 <- c(0.5, 0.4, 0.4, 0.5, 0.8, 0.6, 0.5)
date <- c("2016-08-09", "2014-07-16", "2014-05-17", "2014-04-17", "2013-04-13", "2013-04-10", "2013-04-01")

myframe <- data.frame(names, num1, num2, num3, date)

dayssignedin <- c(755, 0, 399, 369, 0, 9, 0)

desiredoutput1 <- data.frame(myframe, dayssignedin)

num1correlates <- c(1,1, 0.9800646, 0.9800646, 0.9800646, -1, -1)

desiredoutputfinal <- data.frame(desiredoutput, num1correlates)

【问题讨论】:

  • 你是对的,我错了。
  • num1correlates 会将 num1 上的一个人的值与同一个人在 dayssignedin 上的值相关联。它只是重复,因为我想不出任何其他方式来存储该信息。
  • 非常感谢。所以想象一下这些价值是跳跃的高度。时间流逝等于训练。然后分别为每个人计算 num1correlates,例如 Mortimer 通过采用 cor(c(0.8, 0.9, 0.2), c(399, 369, 0)) 来评估训练和跳跃高度之间的联系。我将值增加三倍可能会让人感到困惑,因为实际上只有一个相关性,但我认为这是一种存储数据的便捷方式。
  • 它来自于“2014-04-17”-“2013-04-13”,这是我遇到问题的关键。这也是我不能简单地取最大值和最小值的原因。
  • 所以基本上我总是想从一个人的每个日期中减去最小值。

标签: r dataframe dplyr time-series


【解决方案1】:

使用dplyr 的一种方法是将date 转换为Date 对象,用min每个names 的最大日期减去date,然后计算num1dayssignedin 之间的相关性。

library(dplyr)

myframe %>%
  mutate(date = as.Date(date)) %>%
  group_by(names) %>%
  mutate(dayssignedin = as.integer(date - min(date)), 
         num1correlates = cor(num1, dayssignedin))

#  names      num1  num2  num3 date       dayssignedin num1correlates
#  <fct>     <dbl> <dbl> <dbl> <date>            <int>          <dbl>
#1 Richard     0.8   0.6   0.5 2016-08-09          755          1    
#2 Richard     0.1   0.3   0.4 2014-07-16            0          1    
#3 Mortimer    0.8   0.8   0.4 2014-05-17          399          0.980
#4 Mortimer    0.9   0.8   0.5 2014-04-17          369          0.980
#5 Mortimer    0.2   0.5   0.8 2013-04-13            0          0.980
#6 Elizabeth   0.2   0.5   0.6 2013-04-10            9         -1    
#7 Elizabeth   0.4   0.3   0.5 2013-04-01            0         -1    

【讨论】:

  • 非常感谢,这太棒了。一定要学会使用 dplyr。
猜你喜欢
  • 1970-01-01
  • 2021-05-27
  • 2021-07-02
  • 1970-01-01
  • 1970-01-01
  • 2013-12-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多