【问题标题】:Error in mutate_impl(.data, dots) using "join" codemutate_impl(.data, dots) 使用“join”代码时出错
【发布时间】:2018-06-29 15:45:53
【问题描述】:

我有一个包含 100000 行的数据集,其中 order_date 显示订单日期,而 user_id 显示用户 ID。我正在尝试创建一个新变量来显示用户在同一天的总订单。我的数据是这样的:

order_date=structure(c(15587, 15647, 15734, 15560, 15599, 15778, 15708, 
15520, 15592, 15447, 15718, 15787, 15519, 15486, 15514, 15784, 
15619, 15705, 15552, 15734, 15493, 15661, 15563, 15600, 15790, 
15485, 15546, 15767, 15704, 15726), class = "Date") 

user_id=c(22607, 28275, 32238, 20202, 4391, 7983, 29590, 11820, 22956, 
3196, 31125, 11709, 6586, 2920, 9698, 36814, 6954, 30368, 19052, 
827, 6599, 517, 8761, 20174, 37367, 11647, 18764, 27271, 30302, 
14808)

daten = data.frame(order_date = order_date, user_id = user_id)

我正在使用此代码:

daten<-join(daten, count(daten, c("order_date", "user_id")))

它创建了一个名为“freq”的新变量,它一直工作到今天。现在它不起作用,我收到这样的错误消息:

mutate_impl(.data, dots) 中的错误: 列c("order_date", "user_id") 的长度必须为 100000(行数)或 1,而不是 2

我使用str 检查了这两个变量的结构,它说两者都有 100000 行。

【问题讨论】:

  • 什么是daten
  • 我的数据框名称

标签: r data-science


【解决方案1】:

我不确定您打算使用哪个 join (inner_join),但您的代码中肯定不正确的一件事是关于 count

count(daten, c("order_date", "user_id")) 应改为:

count(daten, order_date, user_id)

【讨论】:

  • 如果我想使用列名作为动态字符串参数怎么办?
  • @Jelena-bioinf 然后您可以根据需要选择使用dplyr::group_by_atdplyr::summarise_at
【解决方案2】:

我在将字符串参数传递给group_by 函数时遇到了相同的错误消息,该函数将字符串变量向量作为参数。因此,在@MKR 的澄清之后,我将添加解决方案来解决我的问题,这似乎也解决了最初问题的问题:

daten %>% 
group_by_at(vars(one_of(c("order_date", "user_id")))) %>% 
summarise(n = n())

对于原始数据,它没有多大意义(因为所有条目在两列中都是唯一的),但在其他情况下,这可能很有用

【讨论】:

  • 善用one_of。也许您可以添加一个玩具数据框来突出您的解决方案的使用。
猜你喜欢
  • 1970-01-01
  • 2019-05-12
  • 2018-06-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多