【问题标题】:Can someone help me give a function to %>%有人可以帮我给 %>% 一个函数吗
【发布时间】:2021-03-17 21:01:23
【问题描述】:

我试图让 %>% 类似于这样的函数

phase<-csvdata%>%
    filter(csvdata$phase=="test")

或者像这样

mergedrows1<-phase%>%
    group_by(phase$subject,phase$phase)

我可以将数据框中的特定变量组合在一起。

【问题讨论】:

  • 不要在 dplyr 函数中使用 data$column - 它需要不带引号的列名。 csvdata %&gt;% filter(phase == "test")。等等。除此之外,我不知道你的问题是什么——你展示的例子在第一个例子中为%&gt;%filter 和第二个例子中的group_by 提供了两个函数。你想做什么却做不到?

标签: r dplyr magrittr


【解决方案1】:

%&gt;% 管道的想法是第一个参数(通常保留为您在大多数管道友好函数中操作的数据框的名称)被移动到管道前面。换句话说,f(x, y) 等价于x %&gt;% f(y)。通俗的说,就是“取这个数据,然后应用这个函数”。

您的代码的问题是您在数据框中调用了两次变量,这使dplyr 函数(如filter()group_by())感到困惑。当您说csvdata %&gt;% 时,您正在调用数据框一次,当您说csvdata$phase 时再次调用数据框。您不需要在 tidyverse 设置中使用 dataframe$variable。事实上,这正是管道要你避免做的事情。

相反,您只需要执行以下操作:

phase <- csvdata %>%
  filter(phase == "test")

或者

mergedrows1 <- phase %>%
  group_by(subject, phase)

此外,为数据框和数据框内的变量赋予相同的名称是个坏主意。 R 不会感到困惑,但你或代码的读者会。

【讨论】:

  • 非常感谢您的帮助!我想通了,那些 cmets 被注意到了,再次感谢你!
猜你喜欢
  • 2017-01-07
  • 1970-01-01
  • 2021-02-03
  • 2020-06-23
  • 2021-11-24
  • 1970-01-01
  • 2021-12-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多