我想使用dplyr mutate_at函数将函数应用于数据框中的多个列,其中函数输入直接应用的列以及数据帧中的另一列.
作为一个具体的例子,我想改变以下数据帧
# Example input dataframe
df <- data.frame(
x = c(TRUE, TRUE, FALSE),
y = c("Hello", "Hola", "Ciao"),
z = c("World", "ao", "HaOlam")
)
Run Code Online (Sandbox Code Playgroud)
与mutate_at调用类似于此
df %>%
mutate_at(.vars = vars(y, z),
.funs = ifelse(x, ., NA))
Run Code Online (Sandbox Code Playgroud)
返回一个看起来像这样的数据框
# Desired output dataframe
df2 <- data.frame(x = c(TRUE, TRUE, FALSE),
y_1 = c("Hello", "Hola", NA),
z_1 = c("World", "ao", NA))
Run Code Online (Sandbox Code Playgroud)
所需的mutate_at呼叫类似于以下呼叫mutate:
df %>%
mutate(y_1 = ifelse(x, y, NA),
z_1 = ifelse(x, z, NA)) …Run Code Online (Sandbox Code Playgroud) 假设我有以下内容:
foo <- data.frame(Company = c("company1", "foo", "test", "food"), Metric = rnorm(4, 10))
> foo
Company Metric
1 company1 10.539970
2 foo 9.487823
3 test 9.663994
4 food 9.499327
Run Code Online (Sandbox Code Playgroud)
为什么dplyr::filter返回0结果?(而不是第2和第4行)我正在尝试在特定的输入字符串上使用SQL等效的通配符过滤器%like%.
我究竟做错了什么?
在我的yaml电话中,我有
---
title: "`r paste0('Test. Done ', format(Sys.Date(), '%B-%Y'))`"
output:
word_document:
fig_caption: yes
fig_height: 4
fig_width: 7
reference_docx: %userprofile%\Documents\template.docx
---
Run Code Online (Sandbox Code Playgroud)
但YAML抱怨%userprofile%.是否可以包含这样的变量?
我试过例如
reference_docx: "`r file.path(path.expand('~'), 'skabelon.docx')`"
Run Code Online (Sandbox Code Playgroud)
但这仍然会导致YAML错误.
pandoc.exe: `r file.path(path.expand('~'), 'skabelon.docx')`: openBinaryFile: does not exist (No such file or directory)
Run Code Online (Sandbox Code Playgroud)
我想这可能是在yaml之前没有处理r表达式吗?我已经检查过该文件是否存在...或者是因为pandoc正在使用另一个'userprofile'?我怎么检查这个?
然而Title,根据上面更新的标题,我可以在变量中使用这样的调用.我想这一定是特定的针织问题.
当 RMarkdown 文档与 Word 结合时,目录(如果有的话)始终出现在文档的开头。例如,如果我想让目录出现在文档的第二页上,我该怎么做?
如果我要编写 HTML,我可以使用此方法,但它似乎不适用于 Word。这意味着,我创建了一个要在reference_docxYAML 参数中使用的 Word 模板,并将目录放在该模板的底部,但是当我编写报告时,目录出现在文档的前面。
最好,我想使用不依赖于 VBA/VBS 而是仅使用 RMarkdown 和(如果需要)reference_docx文件的解决方案。
制作大型嵌套列表以跟踪使用创建的图通常很方便ggplot2。
例如,这是我如何在大量的图列表中存储少量图,以及主题和子主题的子列表。
summary_plots
$Demographics
Demographics$Socioeconomic$Household_Income_PlotDemographics$Socioeconomic$Education_PlotDemographics$Age_Plot$Product_Usage
Purchase_Frequency_Plot如何ggplot2从整个列表中提取所有绘图对象?我希望能够创建一个“平面”的单层列表,其中包含原始列表中包含的所有图。
这是一个简单的示例列表:
generic_plot <- ggplot(mtcars) + geom_point(aes(x = wt, y = mpg))
summary_plots <- list()
summary_plots$Demographics$Socioeconomic$Income <- generic_plot
summary_plots$Demographics$Socioeconomic$Education <- generic_plot
summary_plots$Demographics$Age <- generic_plot
summary_plots$Product_Usage$Purchase_Frequency <- generic_plot
Run Code Online (Sandbox Code Playgroud)
所需的结果将等同于创建一个如下所示的列表:
list('Demographics.Socioeconomic.Income' = generic_plot,
'Demographics.Socioeconomic.Education' = generic_plot,
...)
Run Code Online (Sandbox Code Playgroud) 我想为数据框中的列创建多个值范围的滞后变量。我的代码可以成功执行我想要的操作,但无法根据我的需要进行扩展(数百次迭代)
我的下面的代码成功地完成了我想要的操作,但无法根据我的需要进行扩展(数百次迭代)
Lake_Lag <- Lake_Champlain_long.term_monitoring_1992_2016 %>%
group_by(StationID,Test) %>%
arrange(StationID,Test,VisitDate) %>%
mutate(lag.Result1 = dplyr::lag(Result, n = 1, default = NA))%>%
mutate(lag.Result5 = dplyr::lag(Result, n = 5, default = NA))%>%
mutate(lag.Result10 = dplyr::lag(Result, n = 10, default = NA))%>%
mutate(lag.Result15 = dplyr::lag(Result, n = 15, default = NA))%>%
mutate(lag.Result20 = dplyr::lag(Result, n = 20, default = NA))
Run Code Online (Sandbox Code Playgroud)
我希望能够使用列表 c(1,5,10,15,20) 或范围 1:150 为我的数据框创建滞后变量。
假设我想从 R 运行一个 VBS 脚本,并且想将一个值从 R 传递到该脚本。
例如,在一个名为“Msg_Script.vbs”的简单文件中,我有以下代码:
Dim Msg_Text
Msg_Text = "[Insert Text Here]"
MsgBox("Hello " & Msg_Text)
Run Code Online (Sandbox Code Playgroud)
如何使用 R 运行此脚本,同时在 R 中编辑参数和/或变量?例如,在上面的脚本中,我将如何编辑Msg_Text变量的值?
我正在使用优秀的tidytext包来标记几个段落中的句子。例如,我想摘录以下一段:
“我完全相信达西先生没有缺陷。他自己毫不掩饰地拥有它。”
并将其标记为两个句子
但是,当我使用默认句子标记器时,tidytext我得到三个句子。
代码
df <- data_frame(Example_Text = c("I am perfectly convinced by it that Mr. Darcy has no defect. He owns it himself without disguise."))
unnest_tokens(df, input = "Example_Text", output = "Sentence", token = "sentences")
Run Code Online (Sandbox Code Playgroud)
结果
# A tibble: 3 x 1
Sentence
<chr>
1 i am perfectly convinced by it that mr.
2 darcy has no defect.
3 he owns it himself without disguise.
Run Code Online (Sandbox Code Playgroud)
有什么简单的方法可以用来tidytext标记句子,但不会遇到常见缩写(例如“Mr.”)的问题?或“博士”。被解释为句子结尾?
我正在为一个包编写单元测试,并且有一些测试,我不希望测试在失败时抛出错误,而是发出警告。
这不是我真正的代码,但假设我想测试如下内容:
add_x_y <- function(x, y) x + y
expect_equal( add_x_y(2, 2), 3 )
Run Code Online (Sandbox Code Playgroud)
输出是一个错误:
Error: add_x_y(2, 2) not equal to 3.
1/1 mismatches
[1] 4 - 3 == 1
Run Code Online (Sandbox Code Playgroud)
是否有变体或替代函数会在此检查中引发警告而不是错误?
我正在使用RMarkdown做课程笔记,每个主要部分都对应于一个给定的讲座。我想将节标题自动设置为“第1课”,“第2课”等格式。这基本上是我要寻找的内容。
讲座1
复习课程。
第二讲
实际学习一些东西
但是,当我使用RMarkdown的默认设置时,会得到以下格式(节号在名称前):
1讲
复习课程。
2讲座
实际学习一些东西。
我如何将自动编号设置为:
(1)跟随名称(例如“ 10月1日-讲座1 ”)
要么
(2)是否以名称引用(例如,使用某种伪代码“ October 1st - Lecture {%section_number%}”)?
下面是可复制为PDF的RMarkdown代码的最小可复制示例。
---
title: "Course_Notes"
output:
pdf_document:
number_sections: true
---
# Lecture
Going over the syllabus.
# Lecture
Actually learning some stuff
Run Code Online (Sandbox Code Playgroud) 使用ggplot2,我想制作一个多面图,其中条带文本在每个子图和它的y轴文本中心,而不是仅在子图上居中.作为参考,这是我要创建的图的示例:
这与相同的图形形成对比,但是条带文本仅在子图区域上居中,如下所示.
作为参考,这是用于生成此图的代码:
library(ggplot2)
library(dplyr)
diamonds_plot <- diamonds %>%
filter(clarity %in% c("IF", "I1")) %>%
ggplot(aes(x = price, y = cut)) +
geom_point() +
facet_wrap(~ clarity, scales = 'free')
Run Code Online (Sandbox Code Playgroud)
如何以编程方式进行此更改?
我猜这可以通过编辑从调用获得的布局对象来完成diamonds_plot %>% ggplot_build %>% ggplot_gtable(),但是要做的确切更改很难确定.
为了使数据可视化样式化,我希望能够使用单词显示整数(例如
“ 217年”
)而不是数字(例如2017)。
作为我要寻找的示例,下面是一个适用于小的标量整数的快速函数:
int_to_words <- function(x) {
index <- as.integer(x) + 1
words <- c('zero', 'one', 'two', 'three', 'four',
'five', 'six', 'seven', 'eight', 'nine',
'ten')
words[index]
}
int_to_words(5)
Run Code Online (Sandbox Code Playgroud)