小编Gre*_*gor的帖子

r删除某些字符后的列名称部分

我有一个包含数千列的大型数据集。列名包括各种不需要的字符,如下所示:

col1_3x_xxx
col2_3y_xyz
col3_3z_zyx
Run Code Online (Sandbox Code Playgroud)

我想从所有列名中删除以“ _3”开头的所有字符串,使其保持干净:

col1
col2
col3
Run Code Online (Sandbox Code Playgroud)

对于5000+列,最有效的方法是什么?

r

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

重新启动R会话而不会中断for循环

在我的for循环中,我需要删除RAM。所以我用rm()命令删除了一些对象。然后,我做,gc()但RAM仍然相同

因此,我使用.rs.restartR()代替gc()它,并且它起作用:重新启动R会话后,将删除我的RAM的足够部分。

我的问题是for循环,在R重新启动后会中断。您是否有想法在.rs.restartR()命令后自动进入for循环?

r

6
推荐指数
2
解决办法
1313
查看次数

使用dplyr将数据框和列表转换为长格式

这是一个难题。

假设您有一个数据框和一个列表。列表中的元素与df中的行一样多:

dd <- data.frame(ID=1:3, Name=LETTERS[1:3])
dl <- map(4:6, rnorm) %>% set_names(letters[1:3])
Run Code Online (Sandbox Code Playgroud)

是否有一种简单的方法(最好使用dplyr / tidyverse)来制作长格式,以使列表中的元素与数据帧的相应行连接在一起?这是我心目中不太优雅的方式:

rows <- map(1:length(dl), ~ rep(., length(dl[[.]]))) %>% unlist()
dd <- dd[rows,]
dd$value <- unlist(dl)
Run Code Online (Sandbox Code Playgroud)

如您所见,对于中的每个向量dl,我们都会根据需要将对应的行复制多次,以容纳每个值。

r tidyverse

6
推荐指数
3
解决办法
135
查看次数

为什么“替代”可以在多行中而不是在一行中工作?

我试图回答有关为data.table对象创建非标准评估函数并进行分组求和的一个很好的问题。Akrun提出了一个可爱的答案,在此我将对其进行简化:

akrun <- function(data, var, group){
 var <- substitute(var)
 group <- substitute(group)
 data[, sum(eval(var)), by = group]
}

library(data.table)
mt = as.data.table(mtcars)
akrun(mt, cyl, mpg)
#    group    V1
# 1:     6 138.2
# 2:     4 293.3
# 3:     8 211.4
Run Code Online (Sandbox Code Playgroud)

我也在研究一个答案,并且得到了几乎相同的答案,但是substitutes与其他答案保持一致。我的导致错误:

gregor = function(data, var, group) {
  data[, sum(eval(substitute(var))), by = substitute(group)]
} 

gregor(mt, mpg, cyl)
# Error in `[.data.table`(data, , sum(eval(substitute(var))), by = substitute(group)) : 
#  'by' or 'keyby' must evaluate to vector or list …
Run Code Online (Sandbox Code Playgroud)

r data.table non-standard-evaluation

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

在R中的多个列上聚合table()而没有"by"细分

我有一个2列数据框的x和y坐标点.我想生成一个表中每个点的出现次数.使用该table()命令可为所有可能的xy对生成一个表.我可以消除额外的东西

fullTable <- table(coords)
smalLTable <- subset(fullTable, fullTable > 0)
Run Code Online (Sandbox Code Playgroud)

然后我确信我可以用一些东西dimnames(fullTable)来获得适当的坐标,但是有更好的方法吗?内置的东西?与之相关的东西

coords <- data.frame(x = c(1, 1, 2, 2, 3, 3), y = c(1, 1, 2, 1, 1, 1))
Run Code Online (Sandbox Code Playgroud)

会回来的

x y count
1 1 2
2 1 1
2 2 1
3 1 2
Run Code Online (Sandbox Code Playgroud)

aggregate r dataframe

5
推荐指数
2
解决办法
8803
查看次数

RStudio在启动时无法找到我的库

几个星期前我在RStudio支持论坛上问过这个问题,但是那里还没有解决,所以我在这里试试.

我在Windows 7和R 2.15.2上使用RStudio 0.97.248(当前版本).

当我打开RStudio时,在正常的R版本信息之后,我遇到两个错误:

Error in packageVersion("knitr") : package ‘knitr’ not found  Error in
packageVersion("Rcpp") : package ‘Rcpp’ not found
Run Code Online (Sandbox Code Playgroud)

但我可以加载两个包没有问题使用require().(也就是说,在启动RStudion错误之后,我可以进入require(knitr)并将knitr成功加载.真正的问题是,即使在手动加载后,我也无法在R Markdown文档上使用Knit HTML命令knitr.如果我载knitrrequire(knitr),然后打开一个新的R降价文档(这RStudio默认为一个漂亮的模板),将其保存并尝试针织HTML,RStudio给我一点点的错误消息于R降价文档的顶部是

R Markdown需要knitr包(0.5或更高版本)

我假设RStudio没有查看正确的库路径.

> .libPaths()
[1] "\\\\gregorp.homedir.nebula.washington.edu/homes/R/win-library/2.15"
[2] "C:/Program Files/R/R-2.15.2/library"                               
[3] "C:/Program Files/RStudio/R/library"
Run Code Online (Sandbox Code Playgroud)

第一个条目是我可以的地方并安装包(我的Rcppknitr安装位于).我想我和这个人有同样的问题,但那次讨论是不连贯的.

我尝试添加该行

.Library.site <- "\\\\gregorp.homedir.nebula.washington.edu/homes/R/win-library/2.15"
Run Code Online (Sandbox Code Playgroud)

到我的Rprofile.site文件R-2.15.2/etc/夹中的文件,但问题仍然存在.

r rstudio

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

在字符串替换中避免 for 循环?

我有数据、一个字符向量(最终我会把它折叠起来,所以我不在乎它是一个向量还是被视为单个字符串)、一个模式向量和一个替换向量。我希望数据中的每个模式都被其各自的替换所替换。我用一个stringr和一个 for 循环完成了它,但是有没有更像 R 的方法来做到这一点?

require(stringr)
start_string <- sample(letters[1:10], 10)
my_pattern <- c("a", "b", "c", "z")
my_replacement <- c("[this was an a]", "[this was a b]", "[this was a c]", "[no z!]")
str_replace(start_string, pattern = my_pattern, replacement = my_replacement)
# bad lengths, doesn't work

str_replace(paste0(start_string, collapse = ""),
    pattern = my_pattern, replacement = my_replacement)
# vector output, not what I want in this case

my_result <- start_string
for (i in 1:length(my_pattern)) {
    my_result <- str_replace(my_result,
        pattern = my_pattern[i], …
Run Code Online (Sandbox Code Playgroud)

r

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

找到最近的较小数字

有一个带有以下数字的向量

f<-c(1,3,6,8,10,12,19,27)
Run Code Online (Sandbox Code Playgroud)

哪个元素最接近18.因此19将是最接近的元素,但函数需要返回6(这意味着值12),因为向量中的元素总是较小,除非它等于输入.如果输入为19则输出需要为7(索引)...

r numeric vector

5
推荐指数
3
解决办法
3453
查看次数

仅填充(扩展)ggplot2 中连续刻度的顶部

我有一些数据共享一个共同的 x 轴,但有两个不同的 y 变量:

set.seed(42)
data = data.frame(
    x = rep(2000:2004, 2),
    y = c(rnorm(5, 20, 5), rnorm(5, 150, 15)),
    var = rep(c("A", "B"), each = 5)
)
Run Code Online (Sandbox Code Playgroud)

我正在使用分面线图来显示数据:

p = ggplot(data, aes(x, y)) +
    geom_line() +
    facet_grid(var ~ ., scales = "free_y")
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

我希望 y 轴包含 0。这很容易:

p + expand_limits(y = 0)
Run Code Online (Sandbox Code Playgroud)

但随后我的数据看起来过于拥挤,离我的方面的顶部太近了。所以我想填充轴的范围。通常scale_y_continuous(expand = ...)用于填充轴,但填充对称地应用于顶部和底部,使 y 轴远低于0。

p + expand_limits(y = 0) + 
    scale_y_continuous(expand = c(0.3, 0.2))
# the order of expand_limits and scale_y_continuous
# …
Run Code Online (Sandbox Code Playgroud)

r ggplot2

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

多个y轴用于条形图和使用ggplot的折线图

我有一些来自实验的蒸腾数据,我希望在使用R的线图上显示时间序列.我也有一些降水数据,我想在条形图上显示在同一图表上.我已经能够使用R的基本程序来做到这一点,但我想在ggplot中这样做.我到处搜索,我知道设计师不太喜欢用这种方式制作图形所以它很难,但我已经看到它使用两个y轴完成了多个线图/散点图.它可以用折线图和条形图完成吗?

这是我在基本R中所拥有的 蒸腾时间序列

这是我用来制作情节的数据

时间序列数据在这里

这里的降雨数据

以下是上图的代码.

 attach(summary)
library(Hmisc)
library(scales)
par(mar=c(6.5,4,4,5)+.1)
plot(summary$dates,summary$c_mean_am,type="n",ylim=c(100,350),
     main="Stomatal Conductance during experiment",las=1,cex.main=1,
     font.lab=2,font.axis=2,cex.axis=0.7,cex.lab=0.8,
     ylab=expression('Stomatal conductance'~(m~mol~ m^{2})),,xlab="Date")
lines(dates,c_mean_am,pch=21,cex=0.6,bg="blue",col="blue")
lines(dates,T1_mean_am,pch=21,cex=0.6,bg="yellow",col="yellow")
lines(dates,T2_mean_am,pch=21,cex=0.6,bg="hotpink1",col="hotpink1")
lines(dates,T3_mean_am,pch=21,cex=0.6,bg="orange",col="orange")
lines(dates,T4_mean_am,pch=21,cex=0.6,bg="red",col="red")
with (data = summary  , expr = errbar(dates, c_mean_am, 
                                      c_mean_am+c_se_am, 
                                      c_mean_am-c_se_am, 
                                      add=T, pch=21,col="blue",bg="blue",
                                      cex=0.6,cap=0.01,errbar.col="blue"))
with (data = summary  , expr = errbar(dates, T1_mean_am, 
                                      T1_mean_am+T1_se_am, 
                                      T1_mean_am-T1_se_am, add=T, 
                                      pch=21,col="yellow",bg="yellow",
                                      cex=0.6,cap=0.01,errbar.col="yellow"))
with (data = summary  , expr = errbar(dates, T2_mean_am, 
                                      T2_mean_am+T2_se_am, 
                                      T2_mean_am-T2_se_am, 
                                      add=T, pch=21,col="hotpink1",
                                      bg="hotpink1",cex=0.6,cap=0.01,
                                      errbar.col="hotpink1"))
with (data = summary  , expr = errbar(dates, T3_mean_am, 
                                      T3_mean_am+T3_se_am, 
                                      T3_mean_am-T3_se_am, 
                                      add=T, pch=21,col="orange", …
Run Code Online (Sandbox Code Playgroud)

r bar-chart ggplot2 yaxis

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