使用R中的括号和管道进行子集/过滤

问题描述

我无法使管道和括号[]一起工作。我怀疑我不了解管道的工作原理。

我正在尝试使用方括号和管道回答以下问题: 这个国家的名字叫什么,那是1952年最富有的国家? (数据来自软件包gapminder

我尝试过:

1. df[df$year == 1970,] %>% df[df$money == max(df$money),]["country"]

2. df %>% filter(year=="1970") %>% df[df$money == max(df$money),]["country"]

3. df %>% filter(year=="1970") %>% filter(money == max(df$money))

在不使用管道的情况下使用它-所有线路单独工作。我不是在寻找解决该问题的其他方法,而是要更好地了解管道和支架,并使用它们来解决问题。 对于1.和2.,我得到一个错误,提示Error in xj[i] : invalid subscript type 'list',而对于3,我得到了一个使我感到困惑的空数据框。

解决方法

我认为你快到了。

尝试一下:

from django.shortcuts import get_object_or_404

class Program_structure(generic.View):

    def get(self,*args,**kwargs):
        profile = get_object_or_404(Student,user=request.user)
        program_structure = Course.objects.filter(student=profile)
        context = {
           'test':program_structure,'profile':profile,}
        return render(self.request,'program_structure.html',context)

您不需要df %>% filter(year == 1970) %>% filter(money == max(money)) 部分。最后一个选项可能会返回并清空df,因为在总数据框中出现的最高金额发生在1970年以外的年份。年份也可能是数字,因此应使用不带引号的方式。

,

有几种不同的解决方法,这些方法更具可读性。但是,如果您想使用管道和括号来了解它们是如何工作的,那么下面的代码应该可以做到这一点。你快到了您可以使用“。”运算符,代表管道进行结转之前的最后一个过程的输出

df[df$year == 1970,] %>% 
  .[.$money == max(.$money),] %>% 
  .["country"]

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...