当前位置: 首页 > 知识库问答 >
问题:

检查R数据。为另一列中的相等值设置框架列

杜凯
2023-03-14

我正在寻找以下问题的矢量化解决方案。有些客户可以同时拥有两种不同产品x或y中的一种。我想识别同一客户的产品x后面跟有产品y的所有行。在这种情况下,产品x的< code>to_date将与产品y的< code>from_date相同。下面是一个示例:

customerid = c(rep(1,2),rep(2,3))
product = c("x", "y", "x", "x", "y")
from_date = as.Date(c("2000-01-01", "2000-06-07","2001-02-01","2005-01-01","2005-11-01"))
to_date = as.Date(c("2000-06-07", "2000-10-31","2002-04-01","2005-11-01","2006-01-01"))

data.frame(customerid, product, from_date, to_date)

      customerid product  from_date    to_date
1          1       x 2000-01-01 2000-06-07
2          1       y 2000-06-07 2000-10-31
3          2       x 2001-02-01 2002-04-01
4          2       x 2005-01-01 2005-11-01
5          2       y 2005-11-01 2006-01-01

所需的输出如下所示:

  customerid product  from_date    to_date followed_by_y
1          1       x 2000-01-01 2000-06-07             yes
2          1       y 2000-06-07 2000-10-31             no
3          2       x 2001-02-01 2002-04-01             no
4          2       x 2005-01-01 2005-11-01             yes
5          2       y 2005-11-01 2006-01-01             no

到目前为止,我的方法是使用 dplyr 按服装对 data.frame 进行分组。但是我不知道如何在from_date中检查to_date中相等的值。

共有1个答案

汝跃
2023-03-14

您可以检查所有条件,如下所示:

library(dplyr)

df %>%
  group_by(customerid) %>%
  mutate(followed_by_y = c('no', 'yes')[(product == 'x' &
                                         lead(product) == 'y' &
                                         to_date == lead(from_date)) + 1])

输出:

# A tibble: 5 x 5
# Groups:   customerid [2]
  customerid product from_date  to_date    followed_by_y
       <dbl> <fct>   <date>     <date>     <chr>        
1          1 x       2000-01-01 2000-06-07 yes          
2          1 y       2000-06-07 2000-10-31 no           
3          2 x       2001-02-01 2002-04-01 no           
4          2 x       2005-01-01 2005-11-01 yes          
5          2 y       2005-11-01 2006-01-01 no   

注意,这与说:

library(dplyr)

df %>%
  group_by(customerid) %>%
  mutate(followed_by_y = case_when(
    product == 'x' & lead(product) == 'y' & to_date == lead(from_date) ~ 'yes',
    TRUE ~ 'no')
  )
 类似资料:
  • 我想看看这些数据。帧列具有任何要移动到下一个循环的null值。我目前正在使用以下代码: 吐出警告: 在if(is.na(df\u cell\u client[,分子])==TRUE){…:条件具有长度 如何检查是否有任何值为null,而不仅仅是第一行?

  • 问题内容: 我有2个数据框。 我想遍历每行,并检查每个名称是否在中。 如果名称在其中,结果应返回1,否则返回0: 谢谢。 问题答案: 采用 在数据框中显示结果 在系列对象中

  • 我有一张800万行的大桌子。此表有15列带有数值,但这些值只能是0,并且只能是该列特有的另一个数值。我想根据特定值为这些列中的每一列创建两个新列。这些新值总是特定于列。 这是我的数据外观的虚拟示例: 这是我想要的输出 对应关系始终相同,即中1的值为,中2的值为,中3的值为。 我知道我可以用这样的东西 但我的真实数据有15列,需要大量的复制粘贴,有没有干净的方法?

  • 问题内容: 我需要基于Pandas数据框中的另一列的值来设置一列的值。这是逻辑: 我无法做到这一点,我想要做的就是简单地创建一个具有新值的列(或更改现有列的值:任何一个都对我有用)。 如果我尝试运行上面的代码,或者将其编写为函数并使用apply方法,则会得到以下信息: 问题答案: 一种方法是将索引与配合使用。 例 在没有示例数据框的情况下,我将在此处进行补充: 假设您想 创建一个新列 ,除wher

  • 问题内容: 我有两个数据框,第一个有1000行,看起来像: 该列具有不同的值,有时会重复,但通常大约有50个唯一值。 第二个数据框包含所有这50个唯一值(50行)以及与这些值关联的酒店: 我的目标是用第二个数据帧的列的相应值替换第一个数据帧的列中的值,或者用相应的值创建该列。当我尝试通过像 我有一个错误,即数据帧的大小不相等,因此无法进行比较 问题答案: 如果将索引设置为另一个df上的“组”列,则

  • 问题内容: 我正在检查一个变量,例如,是否等于多个值。例如, 关键是,对于这样一个琐碎的任务,这是很多代码。我想出了以下几点: 但这也不完全吸引我,因为我必须给对象中的项目赋予冗余值。 有谁知道对多个值进行相等性检查的体面方法? 问题答案: 使用提供的答案,我得出以下结论: 可以这样称呼: 编辑: 最近我碰到了这个“技巧”,如果值是字符串并且不包含特殊字符,则很有用。对于特殊字符,由于转义而变得丑