我正在阅读一堆CSV,这些CSV在标题中有"销售 - 数千"之类的东西,并且作为"销售......数千"进入R.我想使用正则表达式(或其他简单方法)来清理它们.
我无法弄清楚为什么这不起作用:
#mock data
a <- data.frame(this.is.fine = letters[1:5],
this...one...isnt = LETTERS[1:5])
#column names
colnames(a)
# [1] "this.is.fine" "this...one...isnt"
#function to remove multiple spaces
colClean <- function(x){
colnames(x) <- gsub("\\.\\.+", ".", colnames(x))
}
#run function
colClean(a)
#names go unaffected
colnames(a)
# [1] "this.is.fine" "this...one...isnt"
Run Code Online (Sandbox Code Playgroud)
但是这段代码确实:
#direct change to names
colnames(a) <- gsub("\\.\\.+", ".", colnames(a))
#new names
colnames(a)
# [1] "this.is.fine" "this.one.isnt"
Run Code Online (Sandbox Code Playgroud)
请注意,当发生这种情况时,我可以在单词之间留一段时间.
谢谢.
我尝试了很多次,简单的光栅绘图是空的。但可以绘制子数据框。所以我考虑了 ggplot 中的一些错误?数据框不是很大,大约10k行。
df <-
tibble::tribble(
~x, ~y, ~mean, ~k, ~p, ~k1,
5044676.13, 5567208.267, 76.17061754, -0.346729916, 0.006967871, "(-1,0]",
5076676.13, 5487208.267, 71.42755804, -0.430442239, 0.011792143, "(-1,0]",
5188676.13, 5463208.267, 77.64019292, 0.230009537, 0.072617934, "(0,1]",
5148676.13, 5447208.267, 71.11206476, -0.244530952, 0.055665191, "(-1,0]",
4932676.13, 5399208.267, 47.52124286, -0.196172453, 0.060010053, "(-1,0]",
5036676.13, 5351208.267, 69.77565423, 0.043384786, 0.366328498, "(0,1]",
4980676.13, 5343208.267, 65.96337177, -0.348177839, 8.43e-06, "(-1,0]",
5252676.13, 5295208.267, 116.3495365, 0.124572049, 0.584311077, "(0,1]",
4932676.13, 5279208.267, 65.1707162, 0.242013783, 0.114344889, "(0,1]",
5060676.13, 5271208.267, 66.02839503, 0.084724445, 0.264818634, "(0,1]",
5100676.13, 5271208.267, 154.3897871, -0.937553354, 0.000412151, "(-1,0]",
4820676.13, 5255208.267, …Run Code Online (Sandbox Code Playgroud) 以mpg数据集为例,我想facet_grid()在每个制造商下仅列出相关模型的地方使用。
该代码似乎有效(左图)
library(ggplot2)
qplot(cty, model, data=mpg) +
facet_grid(manufacturer ~ ., scales = "free", space = "free")
Run Code Online (Sandbox Code Playgroud)
但这不是(对)
ggplot(mpg) +
geom_bar(aes(x = model, y = cty), stat = "identity") +
coord_flip() +
facet_grid(manufacturer ~ ., scales = "free", space = "free")
Run Code Online (Sandbox Code Playgroud)
我看到了此线程,但无法正常工作: 带刻面的水平条形图
有什么想法吗?
我想换出用户编写的一些代码。这些表达式就像一个列表,但我不知道如何更新它们。我可以append(),但不行replace()。
orig_code <-
parse(text =
"library(tidyverse)
list_1 <- list(a = 1, b = 2)"
)
new_code <- parse(text = "list_1 <- list(a = 1:3)")
# I can append
append(
x = orig_code,
values = new_code
)
#> expression(
#> library(tidyverse),
#> list_1 <- list(a = 1, b = 2),
#> list_1 <- list(a = 1:3)
#> )
# but not replace
replace(
x = orig_code,
list = 2,
values = new_code
)
#> expression(
#> library(tidyverse), …Run Code Online (Sandbox Code Playgroud) 管道dplyr很冷,有时我想通过对它应用多个命令来清理一列.有没有办法在mutate()命令中使用管道?在使用正则表达式时我最常注意到这一点,并且在其他情况下也会出现.在下面的例子中,我可以清楚地看到我正在应用于"清洁"一栏的不同操作,我很好奇是否有办法做一些模仿%>%内部的事情mutate().
library(dplyr)
phone <- data.frame(Numbers = c("1234567890", "555-3456789", "222-222-2222",
"5131831249", "123.321.1234","(333)444-5555",
"+1 123-223-3234", "555-666-7777 x100"),
stringsAsFactors = F)
phone2 <- phone %>%
mutate(Clean = gsub("[A-Za-z].*", "", Numbers), #remove extensions
Clean = gsub("[^0-9]", "", Clean), #remove parentheses, dashes, etc
Clean = substr(Clean, nchar(Clean)-9, nchar(Clean)), #grab the right 10 characters
Clean = gsub("(^\\d{3})(\\d{3})(\\d{4}$)", "(\\1)\\2-\\3", Clean)) #format
phone2
Run Code Online (Sandbox Code Playgroud)
我知道可能有一个更好的gsub()命令但是出于这个问题的目的,我想知道是否有办法将这些gsub()元素连接在一起,这样我就不必继续写,Clean = gsub(...)但也不必使用我的方法将这些嵌入彼此.
如果你用一个更简单的例子回答这个问题,我会没事的.
我正在搜索 R 脚本,但不确定为什么as.character()删除`[`. 有什么方法可以将代码作为字符串向量正确返回吗?
注意 `[`(. < 5)变成(. < 5)[]
注意:我不是在寻找更好的方法来进行这个调用,因为这不是我的代码。
code <-
"1:10 %>% `[`(. < 5) %>% mean()
a <- 1:3"
# fine
parse(text = code)
#> expression(1:10 %>% `[`(. < 5) %>% mean(), a <- 1:3)
# not fine
as.character(parse(text = code))
#> [1] "1:10 %>% (. < 5)[] %>% mean()"
#> [2] "a <- 1:3"
Run Code Online (Sandbox Code Playgroud)
由reprex 包(v0.3.0)于 2020 年 7 月 1 日创建
问题是我需要替换掉部分代码,以便我的函数工作。该函数查找反应命令并将它们更改为用户可以在其环境中访问的函数。它是我的Shinyobjects包(无耻插件)的一部分。
a <- …Run Code Online (Sandbox Code Playgroud)