我正在尝试使用 grepl 从数据框中提取某些记录。
这是基于两列结果和名称之间的比较。这个变量是这样构建的,但是对于同一个单词,我有多个数字(超过 30 个),所以当我使用 grepl 表达式来获取例如 Word1 时,我也会得到我想要避免的结果,如 Word12。
有想法该怎么解决这个吗?
Names <- c("Word1")
colnames(Names) <- name
Results <- c("Word1", "Word11", "Word12", "Word15")
Records <- c("ThisIsTheResultIWant", "notThis", "notThis", "notThis")
Relationships <- data.frame(Results, Records)
Relationships <- subset(Relationships, grepl(paste(Names$name, collapse = "|"), Relationships$Results))
Run Code Online (Sandbox Code Playgroud)
这不起作用,如果我使用fixed = TRUE它根本不返回任何结果(这很奇怪)。我也尝试将名称部分与这样的其他数字连接,但没有成功:
Relationships <- subset(Relationships, grepl(paste(paste(Names$name, '3', sep = ""), collapse = "|"), Relationships$Results))
Run Code Online (Sandbox Code Playgroud)
由于我正在连接,因此我不太确定如何使用 \b 来强制执行完全匹配。
有什么建议?
从图中使用这个例子我试图绘制两条垂直线来表示平均值和中位数.
可重复的代码
library(plotly)
# data
df1 <- data.frame(cond = factor( rep(c("A","B"), each=200) ),
rating = c(rnorm(200),rnorm(200, mean=.8)))
df2 <- data.frame(x=c(.5,1),cond=factor(c("A","B")))
# graph
ggplot(data=df1, aes(x=rating, fill=cond)) +
geom_vline(aes(xintercept=mean(rating, na.rm=T))
, color="red", linetype="dashed", size=1, name="average") +
geom_vline(aes(xintercept=median(rating, na.rm=T))
, color="blue", linetype="dashed", size=1, name="median") +
geom_histogram(binwidth=.5, position="dodge")
ggplotly()
Run Code Online (Sandbox Code Playgroud)
问题
我想要抑制红色文本'average'旁边显示的y值-2.2.但是,我希望文本"平均"显示在下面的屏幕截图中.即我只想压制我已经穿过黑色十字架的标签.同样的问题适用于中线.
我的非工作尝试
#plot
gg <- ggplot(data=df1, aes(x=rating, fill=cond)) +
geom_vline(aes(xintercept=mean(rating, na.rm=T))
, color="red", linetype="dashed", size=1, name="average")+
geom_vline(aes(xintercept=median(rating, na.rm=T))
, color="blue", linetype="dashed", size=1, name="median") +
geom_histogram(binwidth=.5, position="dodge")
p <- plotly_build(gg)
# p$data[[1]]$y[1:2] …Run Code Online (Sandbox Code Playgroud) 我正在使用bash管道数据,Rscript所以:
cat random.csv | Rscript test.R arg >| delete.csv
我的目标是使用R包readr来读取stdin和写stdout.我在这里找到了stdin的答案.
test.R
#!/usr/bin/Rscript
suppressMessages(library(readr))
args <- commandArgs(trailingOnly = TRUE)
df.in <- read_csv(file("stdin"))
write_csv(df.in, path = stdout())
Run Code Online (Sandbox Code Playgroud)
上面的代码在命令行中生成以下错误消息:
错误信息
Error in path.expand(path) : invalid 'path' argument
Calls: write_csv -> write_delim -> normalizePath -> path.expand
Execution halted
Run Code Online (Sandbox Code Playgroud)
我也试过write_csv(df.in, file("stdout"))并write_csv(df.in, stdout())生成相同的错误消息.
为了重现性,这里是一个链接 random.csv
我正在尝试使用PySpark数据帧尽可能高效地执行以下操作。我有一个数据框,其中的一列包含文本和我要过滤行的单词列表。所以:
数据框看起来像这样
df:
col1 col2 col_with_text
a b foo is tasty
12 34 blah blahhh
yeh 0 bar of yums
Run Code Online (Sandbox Code Playgroud)
该列表将是list = [foo,bar]
,因此结果将是:
result:
col1 col2 col_with_text
a b foo
yeh 0 bar
Run Code Online (Sandbox Code Playgroud)
之后,不仅将完成相同的字符串匹配,而且还将通过使用SequenceMatcher进行测试以进行相似性测试。这是我已经尝试过的:
def check_keywords(x):
words_list = ['foo','bar']
for word in x
if word == words_list[0] or word == words_list[1]:
return x
result = df.map(lambda x: check_keywords(x)).collect()
Run Code Online (Sandbox Code Playgroud)
不幸的是我不成功,有人可以帮我吗?提前致谢。
我试图找出如何根据最终用户的选择编写.csv.所做的选择将对"geodata.csv"进行子集化,并在应用程序文件夹中编写单独的"solution.csv"文件.
注意 - 我创建了一个github仓库,以便更轻松地解决问题.它包含geodata.csv,ui.R和server.R但还没有解决方案.
geodata.csv
Postcode,HC,BSL,Position Location
10,1,A,C
10,1,A,D
10,1,A,D
11,1,B,C
11,1,B,C
Run Code Online (Sandbox Code Playgroud)
ui.R
shinyUI(
pageWithSidebar(
headerPanel('Min. working example - write a csv based on user input'),
sidebarPanel(
selectInput("filter1", "First selection:"
, choices = c(Choose='', "A", "B")
#, multiple=T
),
selectInput("filter2", "Second selection:",
choices = c(Choose='', "C", "D")
),
br(),
p("Include actionButton to prevent write occuring before user finalises selection"),
actionButton("generateButton","Write Data")
),
mainPanel()
)
)
Run Code Online (Sandbox Code Playgroud)
server.R
# Load data
setwd("/Users/lukesingham/SOtestApp")
geodata <- read.csv("geodata.csv", na.string = "#N/A", row.names=NULL)
# …Run Code Online (Sandbox Code Playgroud) 运行代码,包括plotly_build(p)正确的绘图结果.
library(plotly)
#data
df1 <- data.frame(cond = factor( rep(c("A","B"), each=200) ),
rating = c(rnorm(200),rnorm(200, mean=.8)))
df2 <- data.frame(x=c(.5,1),cond=factor(c("A","B")))
#plot
gg <- ggplot(data=df1, aes(x=rating, fill=cond)) +
geom_vline(aes(xintercept=mean(rating, na.rm=T))
, color="red", linetype="dashed", size=1, name="average") +
geom_vline(aes(xintercept=median(rating, na.rm=T))
, color="blue", linetype="dashed", size=1, name="median", yaxt="n") +
geom_histogram(binwidth=.5, position="dodge")
#create plotly object
p <- plotly_build(gg)
#append additional options to plot object
p$data[[1]]$hoverinfo <- "name+x" #hover options for 'average'
p$data[[2]]$hoverinfo <- "name+x" #hover options for 'median'
#display plot
plotly_build(p)
config(displayModeBar = F, showLink …Run Code Online (Sandbox Code Playgroud)