我几乎在编程格式化r输出一个初学者,但我有一个基本的了解knitr,xtable,降价和Pandoc的一个标记格式转换为另一种能力.我想要做的是将R数据帧写入dfHTML表,并将特定颜色应用于满足条件的每一行(例如,df$outcome == 1).但是,我不确定哪个软件包可以通过简单有效的方式完成此任务,但是从浏览一些表格格式线程(xtable线程1,xtable线程2,kable文档1)开始,我已经收集了它kable并且xtable可能能够完成我的期望的结果.
为了澄清,这是我可重复的例子(使用xtable,但我对使用kable或其他包的答案感兴趣):
set.seed(123)
df <- data.frame(id = sample(1:100, 20, replace = TRUE),
inputval = sample(seq(0, 1, by=0.01), 20, replace = TRUE),
outcome = sample(1:4, 20, replace = TRUE))
library(xtable)
dfxt <- xtable(df)
knit2html(input = "~/rowcolor_ex.Rmd",
output = OUTPUTHERE
stylesheet = "STYLESHEET.css")
Run Code Online (Sandbox Code Playgroud)
与knit2html引用名为"rowcolor_ex.Rmd"的文件,如下图所示:
```{r,echo=FALSE,results='asis',warning=FALSE,message=FALSE}
print(dfxt,
type = "html",
include.rownames = FALSE,)
``` …Run Code Online (Sandbox Code Playgroud) 我已经阅读了lubridate软件包手册并查询了Stack Overflow,并提出了我的问题的各种排列,但我没有回答我的具体问题.
我想要做的是计算事件发生时的月龄,作为出生日期和某个特定事件日期之间的差异.
因此,我使用sas7bdat包导入了SAS数据集,并使用以下代码将我的SAS日期变量(DOB和Event)转换为R对象:
df$DOB <- as.Date(df$DOB, origin="1960-01-01")
df$DOB1 <- ymd(df$DOB)
Run Code Online (Sandbox Code Playgroud)
和Event变量一样:
df$Event <- as.Date(df$Event, origin="1960-01-01")
df$Event1 <- ymd(df$Event)
Run Code Online (Sandbox Code Playgroud)
但是,DOB有一些NA值.因此,对于我想用于计算年龄(以月为单位)的以下代码.
df$interval <- new_interval(df$DOB1,df$Event1)
df$Age1 <- df$interval %/% months(1)
Run Code Online (Sandbox Code Playgroud)
我收到错误:
est [start +\test*per <end] < - est [start +\test*per <end] +中的错误:下标作业中不允许使用NA
我究竟做错了什么?我尝试过if/else函数,但可能使用不当.
(注意:对于那里的SAS程序员,我试图产生与以下函数相同的结果:
IF DOB ne . THEN Tage=Floor(intck('month',DOB,Event)-(Day(Event)<Day(DOB)));
Run Code Online (Sandbox Code Playgroud) 是否有一个函数,在RStudio中,在没有重新打开RStudio的情况下以64位模式或32位模式重新启动R控制台(或者如果无法避免,至少会自动重新打开它)?
我在使用时通常以32位运行,RODBC因此我可以从Access数据库中检索数据,但是仍然希望在仍然在RStudio中时将64位模式的功能用于所有其他任务.
说我有以下数据帧 df
name <- c("Bill", "Rob", "Joe", "Joe")
address <- c("123 Main St", "234 Broad St", NA, "456 North Ave")
favteam <- c("Dodgers", "Mets", "Pirates", NA)
df <- data.frame(name = name,
address = address,
favteam = favteam)
df
Run Code Online (Sandbox Code Playgroud)
看起来像:
name address favteam
1 Bill 123 Main St Dodgers
2 Rob 234 Broad St Mets
3 Joe <NA> Pirates
4 Joe 456 North Ave <NA>
Run Code Online (Sandbox Code Playgroud)
我想要做的是按名称(或通常,任意数量的ID变量)进行折叠,并且除了NA替换NA最终数据中的值之外还有任何其他值,如下所示:
df_collapse <- foo(df)
name address favteam
1 Bill 123 Main St …Run Code Online (Sandbox Code Playgroud) 当我做一个地图使用ggplot2,并尝试使用斜体的组合图标题的一部分expression(),并italic()使用一个字符串,我的地图出来的期望:
plottitle <- expression(paste('Example map with ', italic('italics')))
crimes <- data.frame(state = tolower(rownames(USArrests)), USArrests)
states_map <- map_data("state")
map <- ggplot(crimes, aes(map_id = state)) +
geom_map(aes(fill = Murder),
map = states_map) +
expand_limits(x = states_map$long,
y = states_map$lat) +
labs(title = plottitle)
map
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试执行相同的操作,但使用对象而不是字符串时,该对象不会计算为所需的字符串:
word <- 'italics'
plottitle2 <- expression(paste('Example map with ', italic(word)))
map <- ggplot(crimes, aes(map_id = state)) +
geom_map(aes(fill = Murder),
map = states_map) +
expand_limits(x = states_map$long,
y = states_map$lat) + …Run Code Online (Sandbox Code Playgroud) 假设我有一系列具有不同拼写错误或其他问题的县,这些问题与2010 FIPS数据集(fips下面创建数据框的代码)区别开来,但正确输入拼写错误的县所在的州.这是sample我的完整数据集中的21个随机观察结果:
tomatch <- structure(list(county = c("Beauregard", "De Soto", "Dekalb", "Webster",
"Saint Joseph", "West Feliciana", "Ketchikan Gateway", "Evangeline",
"Richmond City", "Saint Mary", "Saint Louis City", "Mclean",
"Union", "Bienville", "Covington City", "Martinsville City",
"Claiborne", "King And Queen", "Mclean", "Mcminn", "Prince Georges"
), state = c("LA", "LA", "GA", "LA", "IN", "LA", "AK", "LA", "VA",
"LA", "MO", "KY", "LA", "LA", "VA", "VA", "LA", "VA", "ND", "TN",
"MD")), .Names = c("county", "state"), class = c("tbl_df", "data.frame"
), row.names …Run Code Online (Sandbox Code Playgroud) 我读了一个公共用途的数据集,该数据集在构建最终数据框的过程中创建了数十个临时向量。由于将在较大过程中分析此数据框,因此我计划source使用R脚本来创建该数据框,但不想让自己或将来的用户陷入混乱的全球环境。
我知道我可以ls用来列出全局环境中的当前对象,也可以rm用来删除某些对象,但是我不确定如何一起使用这两个函数来删除除由某个脚本创建的数据帧以外的所有对象。
为了澄清,这是一个可重现的示例:
脚本1,名为“ script1.R”
setwd("C:/R/project")
set.seed(12345)
var <- letters
for (i in var) {
assign(i, runif(1))
}
df <- data.frame(x1 = a, x2 = b, x3 = c)
Run Code Online (Sandbox Code Playgroud)
剧本2
source("script1.r")
Run Code Online (Sandbox Code Playgroud)
这将是很容易的,除去来自所有矢量source通过一些组合d脚本rm,ls用pattern = letters或类似的东西,但我想要做的就是创建一个通用功能,能够消除一定的脚本创建的所有载体和只保留数据帧(在这个例子中df)。
(注:这里和这里都有类似的问题,但是我觉得我的与众不同,因为它更具体地涉及多脚本项目中的采购和清理)。
更新资料 在环顾四周时,以下链接为我提供了不错的解决方法:
具体来说,用户@Fojtasek建议:
我将通过创建一个单独的环境来存储所有垃圾变量,使用with()创建数据框,然后将要保留的变量复制到主环境中来解决这个问题。这样的好处是整洁,而且还可以保留所有对象,以防您再次查看它们。
因此,我可以按如下所示追加创建数据框的源代码...
temp <- new.env()
with(temp, {
var <- letters
for (i in var) {
assign(i, runif(1)) …Run Code Online (Sandbox Code Playgroud) 假设我有一个df包含许多识别变量(在列中)的数据框,并且只有几个测量变量(也在列中).
为避免重复键入每个参数的所有变量,我分别将识别和测量df列的名称分配给df_id和df_measured.输入这些向量很容易缩短参数输入melt...
df.m <- melt(df, id.vars = df_id, measure.vars = df_measured)
Run Code Online (Sandbox Code Playgroud)
...但我不知道如何使用相同的方法来指定我的id变量来输入 formula =参数,dcast因为它要求输入指向列的数字位置.
df_id如果我的输入列按顺序改变,我是否必须创建一个类似于数字位置的向量并冒险破坏我的程序的功能,或者我可以通过名称引用它们并以某种方式仍然可以在formula =参数中工作?谢谢.
我有开头"国"的大量数据帧的列,并且由1数值后缀(例如,country1,country2,country3).我想用dplyr给filter我的数据帧df,以行,其中一个或更多的变量包括某些国家名称作为值(即country1 OR country2 OR country3 %in% "Brazil"),与许多其他条件一起.
我尝试过grep这样做,但我遇到的问题是函数与函数的其余部分同时进行求filter值,因此我收到一条错误消息.这是我尝试过的:
df1 <- filter(df,
a %in% value1
& b %in% value2
& grep("^country.*", colnames(df), value = TRUE) %in% c("Brazil")
Run Code Online (Sandbox Code Playgroud)
当然,R只是将grep函数评估为......
& c("country1", "country2", "country3", ... ) %in% c("Brazil")
Run Code Online (Sandbox Code Playgroud)
并返回一个逻辑向量,其中显然没有值=="巴西":
[1] FALSE FALSE FALSE ...
Run Code Online (Sandbox Code Playgroud)
有没有办法在没有费力地输入所有变量的情况下做到这一点?例如...
& (country1 %in% "Brazil" | country2 %in% "Brazil" | country3 ...
谢谢!
从这个问题中,我得出结论,该形式的变量{{var}}在其他编程语言中可以称为echos,但是我不知道为什么它们在R中执行它们的操作。
即,我已经在RMarkdown模板(这里state_template.Rmd是)中使用了它们,该模板作为输入输入for另一个脚本的循环中。
用另一个脚本中定义的向量元素填充“占位符”文本的示例:
Dear `r paste(contacts$firstname[contacts$state == {{eachstate}}], sep = ", ")`,`
Run Code Online (Sandbox Code Playgroud)
在allstates传递到for循环的每种状态下,这将评估为联系人的名字。
allstates <- state.abb
for (eachstate in allstates) {
knit2html(input = 'state_template.Rmd',
....
}
Run Code Online (Sandbox Code Playgroud)