Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从R标记内联代码中的TIBLE中提取值_R_Dplyr_R Markdown_Knitr_Tibble - Fatal编程技术网

从R标记内联代码中的TIBLE中提取值

从R标记内联代码中的TIBLE中提取值,r,dplyr,r-markdown,knitr,tibble,R,Dplyr,R Markdown,Knitr,Tibble,我希望使用R标记文档中的内联代码从TIBLE访问一个值 下面的代码为我提供了一个1 x 2的TIBLE #library(tidyverse) #library(knitr) # Minimal working example df <- tibble( Event = c("Swimming","Swimming","Swimming","Camping","Hiking","Hiking") ) df # Creates 1 row x 2 column df %>% c

我希望使用R标记文档中的内联代码从TIBLE访问一个值

下面的代码为我提供了一个1 x 2的TIBLE

#library(tidyverse)
#library(knitr)

# Minimal working example
df <- tibble(
  Event = c("Swimming","Swimming","Swimming","Camping","Hiking","Hiking")
)
df

# Creates 1 row x 2 column
df %>% count(Event) %>% slice(which.max(n))

退一步说,我正在寻找一种通用技术,用于从一系列dplyr命令中选择特定的行和单元格,而无需在此过程中创建新对象。

要显示内联的代码行即使不在R标记中也无法运行,请在控制台中尝试。在管道中使用诸如[,[,$之类的特殊运算符时,您需要在前缀中指定它们,而不是像其他函数那样在中缀形式中指定它们。请注意尝试的代码的比较,或者使用[[向下钻取并仅选择文本,而不是返回TIBLE

图书馆管理员 df%countEvent%%>%slicewhich.maxn%%>%`[`1,1 >一个tibble:1x1 >事件 > >1游泳 df%%>%countEvent%%>%slicewhich.maxn%%>%`[`事件 >[1]游泳 然而,这并不能完全解决您的问题,因为R Markdown使用反勾号来表示内联代码,而且更改knitr用于查找和计算内联代码的解析规则非常复杂,因此在这里它会认为代码以`[`。因此,您可以为这些函数使用magrittr别名,在内联代码中使用extract和extract2:

最受欢迎的事件是'r df%>%countEvent%>%slicewhich.maxn%>%magrittr::extract2Event`
最受欢迎的活动是在渲染的降价中游泳。

这就是你想要的吗

df %>% count(Event)

# A tibble: 3 x 2
#  Event        n
# 1 Camping      1
# 2 Hiking       2
# 3 Swimming     3

# To get the first row
(df %>% count(Event))[1,]

# Event       n
# 1 Camping   1

我正在学习几种方法来做到这一点-谢谢大家

1.以下@labatnok:

r df %>% count(Event) %>% slice(which.max(n)) %>% {.[1,1]}
2.以下@MM77:

`r df %>% count(Event) %>% arrange(desc(n)) %>% slice(1) %$% Event`

# result
[1] "Swimming"
这种方法避免使用slice1中的which.max.1表示行,然后%$%事件按名称表示列

它不像base R[1,1]那样容易理解正在发生的事情,但是它完成了任务

3.以下@Mo alfafi:

(df %>% count(Event) %>% arrange(desc(n)))[1,1]
这种方法可以更容易地判断您选择的行/列,还可以避免命名列

4.以下@columyou:

df %>% count(Event) %>% slice(which.max(n)) %>% magrittr::extract2("Event")

我认为这个问题可以帮助你:是的,非常有帮助。让我们看看我是否可以把它应用到这个案例中…你可以尝试r df%>%countEvent%>%slicewhich.maxn%>%{[1,1]}。好吧,如果你在一个句子中包含这一点,你可能会想添加%>%到下面。这真的很有帮助。你知道一个更通用的解决方案,可以让我使用内联代码从TIBLE中选择,比如说,[2,1]或[2,2]。当我想要的结果在[1,1]中时,你优雅的解决方案效果很好。我正在考虑其他使用情形…只需更改extract2中的索引!如果您想要不同的列,请使用该数字/名称。这里是因为您使用了which.max,所以选择列也是选择单个元素。如果有更多行,请添加另一行[为了得到你想要的元素,在管道的末端。接近这个。这是一个好主意-我在我的文章中详细阐述了你的答案。
(df %>% count(Event) %>% arrange(desc(n)))[1,1]
df %>% count(Event) %>% slice(which.max(n)) %>% magrittr::extract2("Event")