r - 计算并附加列中相等字符串的日期差异
问题描述
我有一个数据框,其中包含一个名称变量,其中有不同的重复字符串,然后是一些数字变量和一个日期变量。首先,我试图找出是否可以为所有具有相同值的字符串创建一个新列,从每隔一个日期减去最低日期,因此有一个数值(天)。如果可能的话,我想将选择的数字变量之一与新的日变量相关联,但再次聚合到相同的字符串值或“人”。关于这一点,我不介意在字符串的每一行中列出相关的结果,因为无论如何我稍后都会聚合字符串。我知道这可能听起来很令人困惑,我希望我设置的小例子已经包含“正确”的值,
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)
解决方案
使用dplyr
一种方法是转换date
为 Date 对象,减去每个日期date
的min
最大日期names
,然后计算 和 之间的相关num1
性dayssignedin
。
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
推荐阅读
- c# - ConfigurationManager.GetSection 返回 null,我不知道为什么
- javascript - Javascript - 从外部文件导入 HTML
- python - 我找不到任何问题,但它不工作
- flutter - Flutter web - 始终在 DataTable 中显示水平和垂直滚动条
- ruby - Gem 安装错误数量的参数(给定 4,预期 1)
- guidewire - 访问 Guidewire Demo 实例
- angular - Angular - 选择下拉列表为空白
- css - 如何仅在 bicartel 的产品页面上显示类别?
- enums - 将 Cassandra 枚举列映射到非名称或序号值
- android - 项目之间的水平线性布局空间,没有左右填充