我有一个包含数千列的大型数据集。列名包括各种不需要的字符,如下所示:
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+列,最有效的方法是什么?
在我的for循环中,我需要删除RAM。所以我用rm()命令删除了一些对象。然后,我做,gc()但RAM仍然相同
因此,我使用.rs.restartR()代替gc()它,并且它起作用:重新启动R会话后,将删除我的RAM的足够部分。
我的问题是for循环,在R重新启动后会中断。您是否有想法在.rs.restartR()命令后自动进入for循环?
这是一个难题。
假设您有一个数据框和一个列表。列表中的元素与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,我们都会根据需要将对应的行复制多次,以容纳每个值。
我试图回答有关为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) 我有一个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) 几个星期前我在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.如果我载knitr有require(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)
第一个条目是我可以的地方并安装包(我的Rcpp和knitr安装位于).我想我和这个人有同样的问题,但那次讨论是不连贯的.
我尝试添加该行
.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/夹中的文件,但问题仍然存在.
我有数据、一个字符向量(最终我会把它折叠起来,所以我不在乎它是一个向量还是被视为单个字符串)、一个模式向量和一个替换向量。我希望数据中的每个模式都被其各自的替换所替换。我用一个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) 有一个带有以下数字的向量
f<-c(1,3,6,8,10,12,19,27)
Run Code Online (Sandbox Code Playgroud)
哪个元素最接近18.因此19将是最接近的元素,但函数需要返回6(这意味着值12),因为向量中的元素总是较小,除非它等于输入.如果输入为19则输出需要为7(索引)...
我有一些数据共享一个共同的 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的线图上显示时间序列.我也有一些降水数据,我想在条形图上显示在同一图表上.我已经能够使用R的基本程序来做到这一点,但我想在ggplot中这样做.我到处搜索,我知道设计师不太喜欢用这种方式制作图形所以它很难,但我已经看到它使用两个y轴完成了多个线图/散点图.它可以用折线图和条形图完成吗?
这是我用来制作情节的数据
以下是上图的代码.
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)