我正在努力解决ggplot中scale_shape_manual和scale_colour_manual的问题.从ggplot help(scale_colour_manual)中重新获取示例,我们得到以下两行:
p <- qplot(mpg, wt, data = mtcars, colour = factor(cyl))
p + scale_colour_manual(values = c("red","blue", "green"))
Run Code Online (Sandbox Code Playgroud)
他们工作正常,我可以做任何我想做的事情.但是,如果我决定创建一个像这样的线,这将创建一个组合层的对象
h <- p + scale_colour_manual(values = c("red","blue", "green"))
Run Code Online (Sandbox Code Playgroud)
然后任何命令都会提示我一条警告信息"将class(x)设置为多个字符串("manual","discrete",...);结果将不再是S4对象".即使是非常简单的一个:
a = 2
Run Code Online (Sandbox Code Playgroud)
但是,如果我重新编译它的最后一行它.有人有同样的问题吗?你能帮帮我吗?
以下评论是一个可重复的例子
library(ggplot2)
library(Hmisc)
data(mpg)
p <- qplot(mpg, wt, data = mtcars, colour = factor(cyl))
h <- p + scale_colour_manual(values = c("red","blue", "green"))
a = 2
Run Code Online (Sandbox Code Playgroud)
更新 - 显然它只是一个版本问题,以下版本似乎不能一起工作:R版本3.0.3(2014-03-06)Hmisc_3.14-3和ggplot2_0.9.3.1.有人可能会考虑分离(包:Hmisc,unload = TRUE)或只是接受警告.
谢谢R
我有一个data.table对象,其中包含多个指定唯一案例的列.在下面的小示例中,变量" name"," job"和" sex"指定唯一ID.我想添加缺失的行,以便每个case都有一行用于另一个变量的每个可能实例," from"(类似于expand.grid).
library(data.table)
set.seed(1)
mydata <- data.table(name = c("john","john","john","john","mary","chris","chris","chris"),
job = c("teacher","teacher","teacher","teacher","police","lawyer","lawyer","doctor"),
sex = c("male","male","male","male","female","female","male","male"),
from = c("NYT","USAT","BG","TIME","USAT","BG","NYT","NYT"),
score = rnorm(8))
setkeyv(mydata, cols=c("name","job","sex"))
mydata[CJ(unique(name, job, sex), unique(from))]
Run Code Online (Sandbox Code Playgroud)
这是当前的data.table对象:
> mydata
name job sex from score
1: john teacher male NYT -0.6264538
2: john teacher male USAT 0.1836433
3: john teacher male BG -0.8356286
4: john teacher male TIME 1.5952808
5: mary police female USAT 0.3295078
6: chris lawyer female …Run Code Online (Sandbox Code Playgroud) 我正在使用glmnet包从mtcars数据集获取以下图表(其他变量的mpg回归):
library(glmnet)
fit = glmnet(as.matrix(mtcars[-1]), mtcars[,1])
plot(fit, xvar='lambda')
Run Code Online (Sandbox Code Playgroud)

如何在每条曲线的开头或最大y点(远离x轴的最大值)处为每条曲线添加变量名称?我尝试过,我可以像往常一样添加图例但不是每条曲线或开头的标签.谢谢你的帮助.
我试图在一行中将一堆行累积成一行.如果可能的话,我希望在dplyr中.我知道我的代码远非正确,但这是我得到了多远:
data %>%
group_by(DAY) %>%
summarise_each(funs(Sum = n()), SEX, GROUP, TOTAL)
Run Code Online (Sandbox Code Playgroud)
原版的:
DAY SEX GROUP TOTAL
7/1/14 FEMALE A 1
7/1/14 FEMALE B 1
7/1/14 FEMALE B 1
7/1/14 FEMALE A 1
7/1/14 MALE A 1
7/1/14 MALE B 2
Run Code Online (Sandbox Code Playgroud)
新:
DAY FEMALE MALE GROUP_A GROUP_B TOTAL
7/1/14 4 2 3 3 7
Run Code Online (Sandbox Code Playgroud) 我的实际数据看起来像
8/8/2013 15:10
7/26/2013 10:30
7/11/2013 14:20
3/28/2013 16:15
3/18/2013 15:50
Run Code Online (Sandbox Code Playgroud)
当我从excel文件中读取时,R读为,
41494.63
41481.44
41466.60
41361.68
41351.66
Run Code Online (Sandbox Code Playgroud)
所以我用了,as.POSIXct(as.numeric(x[1:5])*86400, origin="1899-12-30",tz="GMT")我得到了,
2013-08-08 15:07:12 GMT
2013-07-26 10:33:36 GMT
2013-07-11 14:24:00 GMT
2013-03-28 16:19:12 GMT
2013-03-18 15:50:24 GMT
Run Code Online (Sandbox Code Playgroud)
为什么时间有差异?如何克服它?
我的数据中有时间戳,列Timelocal格式如下:
2015-08-24T00:02:03.000Z
Run Code Online (Sandbox Code Playgroud)
通常,我使用以下行转换此格式以将其转换为我可以使用的日期格式.
timestamp2 = "2015-08-24T00:02:03.000Z"
timestamp2_formatted = strptime(timestamp2,"%Y-%m-%dT%H:%M:%S",tz="UTC")
# also works for dataframes (my main use of it)
df$TimeNew = strptime(df$TimeLocal,"%Y-%m-%dT%H:%M:%S",tz="UTC")
Run Code Online (Sandbox Code Playgroud)
这在我的机器上工作正常.问题是,我现在正在使用更大的数据帧.它位于Redshift集群上,我使用RPostgreSQL包访问它.我正在使用dplyr来操作数据,因为在线文档表明它与RPostgreSQL很好地配合.
它似乎确实如此,除了转换日期格式.我想将字符格式转换为时间格式.Timelocal将其作为"varchar"读入Redshift.因此,R将其解释为字符字段.
我尝试过以下方法:
library(dplyr)
library(RPostgreSQL)
library(lubridate)
Run Code Online (Sandbox Code Playgroud)
尝试1 - 使用简单的dplyr语法
mutate(elevate, timelocalnew = fast_strptime(timelocal, "%Y-%m-%dT%H:%M:%S",tz="UTC"))
Run Code Online (Sandbox Code Playgroud)
尝试2 - 使用来自其他在线参考代码的dplyr语法
elevate %>%
mutate(timelocalnew = timelocal %>% fast_strptime("%Y-%m-%dT%H:%M:%S",tz="UTC") %>% as.character()) %>%
filter(!is.na(timelocalnew))
Run Code Online (Sandbox Code Playgroud)
尝试3 - 使用strptime代替 fast_strptime
elevate %>%
mutate(timelocalnew = timelocal %>% strptime("%Y-%m-%dT%H:%M:%S",tz="UTC") %>% as.character()) %>%
filter(!is.na(timelocalnew))
Run Code Online (Sandbox Code Playgroud)
我正在尝试从这里调整代码:http://www.markhneedham.com/blog/2014/12/08/r-dplyr-mutate-with-strptime-incompatible-sizewrong-result-size/
我的尝试是错误的,因为:
Error in postgresqlExecStatement(conn, statement, ...) :
RS-DBI driver: …Run Code Online (Sandbox Code Playgroud) 这是我关于SO的第一个问题,请告诉我是否可以改进.我正在研究R中的自然语言处理项目,并且正在尝试构建包含测试用例的data.table.在这里,我构建了一个简化的示例:
texts.dt <- data.table(string = c("one",
"two words",
"three words here",
"four useless words here",
"five useless meaningless words here",
"six useless meaningless words here just",
"seven useless meaningless words here just to",
"eigth useless meaningless words here just to fill",
"nine useless meaningless words here just to fill up",
"ten useless meaningless words here just to fill up space"),
word.count = 1:10,
stop.at.word = c(0, 1, 2, 2, 4, 3, 3, 6, 7, 5))
Run Code Online (Sandbox Code Playgroud)
这将返回我们将要处理的data.table:
string word.count stop.at.word
1: …Run Code Online (Sandbox Code Playgroud) 例如,假设我希望能够定义一个函数,该函数返回与第一个参数连接的赋值变量的名称:
a <- add_str("b")
a
# "ab"
Run Code Online (Sandbox Code Playgroud)
上面示例中的函数看起来像这样:
add_str <- function(x) {
arg0 <- as.list(match.call())[[1]]
return(paste0(arg0, x))
}
Run Code Online (Sandbox Code Playgroud)
但是,函数的arg0行被一行替换,该行将获得被赋值变量的名称("a")而不是函数的名称.
我已经尝试过使用match.call和sys.call,但我无法让它工作.这里的想法是在变量和函数结果上调用赋值运算符,因此应该是函数调用的父调用.
我想让我的代码更有效率,我有一个调查,我的数据如下:
survey <- data.frame(
x = c(1, 6, 2, 60, 75, 40, 27, 10),
y = c(100, 340, 670, 700, 450, 200, 136, 145))
#Two lists:
A <- c(3, 6, 7, 27, 40, 41)
t <- c(0.10, 0.11, 0.12, 0.13, 0.14, 0.15, 0.16)
Run Code Online (Sandbox Code Playgroud)
我做的是创建新列,如下所示:
z <- ifelse(survey$x %in% A), 0, min(t))
for (i in t) {
survey[paste0("T",i)] <-z
survey[paste0("T",i)] <-ifelse (z > 0, i, z)
}
Run Code Online (Sandbox Code Playgroud)
但是使用该代码需要一段时间,是否有更好的方法呢?
我正在尝试计算此列表中的独特药物数量.
my_drugs=c('a', 'b', 'd', 'h', 'q')
Run Code Online (Sandbox Code Playgroud)
我有以下字典,它给了我药物同义词,但它没有设置,所以定义只适用于独特的药物:
dictionary <- read.table(header=TRUE, text="
drug names
a b;c;d;x
x b;c;q
r h;g;f
l m;n
")
Run Code Online (Sandbox Code Playgroud)
因此,在这种情况下,列表中有2种独特的药物(因为a,直接或间接地具有同义词b,d,q).同义词的同义词计为同义词.
我尝试过的方法是首先制作一本左侧只有独特药物的字典.要做到这一点,我会循环通过字典$ drug,grep in dictionary $ drug和dictionary $ synonyms,取出那些并取代药物$同义词的联合,然后从字典中删除其他行.
bigdf=dictionary
small_df=data.frame("drug"=NA,"names"=NA)
for(i in 1:nrow(bigdf)){
search_term=sprintf("*%s*",bigdf$drug[i])
index=grep(search_term,bigdf$names)
list=bigdf$names[index]
list=Reduce(union,list)
list=paste(list, collapse=";")
if(!list==""){
new_row=data.frame("drug"=bigdf$drug[index][1],"names"=list)
small_df=rbind(small_df,new_row)
#small_df
bigdf=bigdf[-index,]
#dim(bigdf)
}
else{
new_row=data.frame("drug"=bigdf$drug[index][1],"names"="alreadycounted")
small_df=rbind(small_df,new_row)
}
}
Run Code Online (Sandbox Code Playgroud)
这不起作用(small_df中缺少一些药物),即使它我不知道如何使用我的新词典计算我的列表中的独特药物数量.
我如何计算my_drugs中独特药物的数量?
感谢您的帮助,如果需要进一步说明,请与我们联系.
数据集大小:my_drugs中的200个元素,字典中的2000个行,每个药物有10-12个同义词.