小编mcj*_*udd的帖子

R - 使用xtable或kable创建的HTML表中的条件行突出显示

我几乎在编程格式化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)

r xtable knitr r-markdown

13
推荐指数
2
解决办法
7701
查看次数

如何使用lubridate包计算两个日期向量之间的月数,其中一个向量具有NA值?

我已经阅读了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)

r

11
推荐指数
3
解决办法
2万
查看次数

R,RStudio:以编程方式在32位和64位版本的R之间切换

是否有一个函数,在RStudio中,在没有重新打开RStudio的情况下以64位模式或32位模式重新启动R控制台(或者如果无法避免,至少会自动重新打开它)?

我在使用时通常以32位运行,RODBC因此我可以从Access数据库中检索数据,但是仍然希望在仍然在RStudio中时将64位模式的功能用于所有其他任务.

r rstudio

9
推荐指数
1
解决办法
3991
查看次数

如何在删除NA值的同时将多个记录合并为一个

说我有以下数据帧 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)

r

6
推荐指数
1
解决办法
1321
查看次数

在ggplot2标题表达式中使用italic()和变量

当我做一个地图使用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)

r ggplot2 plotmath

6
推荐指数
1
解决办法
3735
查看次数

R:使用plyr在两个数据源的匹配子集之间执行模糊字符串匹配

假设我有一系列具有不同拼写错误或其他问题的县,这些问题与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)

r fuzzy-comparison plyr dplyr

5
推荐指数
1
解决办法
1837
查看次数

采购后清理全局环境:如何在R中删除特定类型的对象

我读了一个公共用途的数据集,该数据集在构建最终数据框的过程中创建了数十个临时向量。由于将在较大过程中分析此数据框,因此我计划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脚本rmlspattern = letters或类似的东西,但我想要做的就是创建一个通用功能,能够消除一定的脚本创建的所有载体和只保留数据帧(在这个例子中df)。

这里这里都有类似的问题,但是我觉得我的与众不同,因为它更具体地涉及多脚本项目中的采购和清理)。

更新资料 在环顾四周时,以下链接为我提供了不错的解决方法:

如何在保留某些对象的同时整洁地清理我的R工作区?

具体来说,用户@Fojtasek建议:

我将通过创建一个单独的环境来存储所有垃圾变量,使用with()创建数据框,然后将要保留的变量复制到主环境中来解决这个问题。这样的好处是整洁,而且还可以保留所有对象,以防您再次查看它们。

因此,我可以按如下所示追加创建数据框的源代码...

temp <- new.env()
with(temp, {
    var <- letters
for (i in var) {
  assign(i, runif(1)) …
Run Code Online (Sandbox Code Playgroud)

r

4
推荐指数
1
解决办法
1280
查看次数

如何在dcast的公式参数中使用列名的字符向量(reshape2)

假设我有一个df包含许多识别变量(在列中)的数据框,并且只有几个测量变量(也在列中).

为避免重复键入每个参数的所有变量,我分别将识别和测量df列的名称分配给df_iddf_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 =参数中工作?谢谢.

r reshape2

3
推荐指数
1
解决办法
1551
查看次数

按%ONE或更多指定列中的特定值%过滤行

我有开头"国"的大量数据帧的列,并且由1数值后缀(例如,country1,country2,country3).我想用dplyrfilter我的数据帧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 ...

谢谢!

r

2
推荐指数
1
解决办法
1344
查看次数

R / RMarkdown中双花括号内变量的使用

这个问题中,我得出结论,该形式的变量{{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)

r knitr r-markdown

2
推荐指数
1
解决办法
812
查看次数

标签 统计

r ×10

knitr ×2

r-markdown ×2

dplyr ×1

fuzzy-comparison ×1

ggplot2 ×1

plotmath ×1

plyr ×1

reshape2 ×1

rstudio ×1

xtable ×1