如何解决使用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"]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。