【问题标题】:Dplyr::filter works on data frame but not on vector, why is this?Dplyr::filter 适用于数据框但不适用于矢量,这是为什么呢?
【发布时间】:2020-09-11 13:33:38
【问题描述】:

我在数据帧上使用了 dplyr:filter 来获取所有不能被 3 和 2 整除的数字,但是这个函数不适用于向量。我很好奇为什么会这样?

这是我的代码:

vec<-vector()

for (i in 1:1260){
  if (i %% 2 !=0){
    vec<-c(vec,i)
  }
}

vec<-data.frame(vec)
vec%>%filter(vec%%3!=0)

【问题讨论】:

  • 好吧,dplyr::filter() 应该应用于数据帧。查看规范中的.data参数。
  • 如果不将vec 转换为数据框,请从magritt vec %&gt;%extract(.%%3!=0) 尝试此操作

标签: r dataframe vector filter


【解决方案1】:

这应该可行:

vec<-vector()

for (i in 1:1260){
  if (i %% 2 !=0){
    vec<-c(vec,i)
  }
}

vec<-data.frame(vec)
answer <- vec%>%filter(vec%%3!=0)
real_answer <- answer$vec

问题是filter 是用来处理数据帧的

【讨论】:

    【解决方案2】:

    查看此处的文档,似乎只有与 tibble/tbl 一起使用是正确的,您很幸运您的 data.frame 可以正常工作:https://www.rdocumentation.org/packages/dplyr/versions/0.7.8/topics/filter

    这似乎是一般理解的一部分,即整洁的数据是 data.frames 中的数据。

    在 R 中,数据通常用于向量,如果 ab 是数据向量,您可以使用它们来绘制它们

    plot(a, b)
    

    a[n] 的值和b[n] 的值通过公共n 连接的隐式连接。但是,在单独更改 ab 时,总是存在这种隐式连接受到干扰的风险。如果在 data.frame 或同一行中的值属于一起的 tibble 中明确连接,则风险较小。

    如果,例如。 G。你做na.omit(a) 不知道哪个a 值属于哪个b 值,而na.omit(data.frame(a, b)) 在这方面是保存的。

    【讨论】:

      【解决方案3】:

      不用data.frame,可以试试

      vec[vec%%3!=0]
      

      subset(vec,vec%%3!=0)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-12-23
        • 1970-01-01
        • 2017-05-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多