小编Jaa*_*aap的帖子

S4对象问题与scale_shape_manual

我正在努力解决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

r shape scale ggplot2

7
推荐指数
0
解决办法
1685
查看次数

根据多个键控列将缺少的行添加到data.table

我有一个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)

merge r cross-join data.table

7
推荐指数
1
解决办法
871
查看次数

在R中的glmnet图中的曲线上添加标签

我正在使用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轴的最大值)处为每条曲线添加变量名称?我尝试过,我可以像往常一样添加图例但不是每条曲线或开头的标签.谢谢你的帮助.

plot r glmnet

7
推荐指数
2
解决办法
4275
查看次数

R将行汇总到一行(连续和因子变量)

我试图在一行中将一堆行累积成一行.如果可能的话,我希望在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)

r dplyr

7
推荐指数
2
解决办法
1574
查看次数

使用Excel在`as.POSIXct`中的数据差异

我的实际数据看起来像

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)

为什么时间有差异?如何克服它?

excel time datetime r

7
推荐指数
1
解决办法
1582
查看次数

如何使用dplyr和RPostgreSQL将字符日期时间转换为可用?

我的数据中有时间戳,列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)

postgresql datetime r amazon-redshift dplyr

7
推荐指数
1
解决办法
1730
查看次数

字符串拆分data.table列生成NA

这是我关于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)

string text-processing r data.table

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

如何访问分配给函数内函数结果的变量名称?

例如,假设我希望能够定义一个函数,该函数返回与第一个参数连接的赋值变量的名称:

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,但我无法让它工作.这里的想法是在变量和函数结果上调用赋值运算符,因此应该是函数调用的父调用.

r variable-assignment operator-keyword

7
推荐指数
2
解决办法
356
查看次数

循环以使用ifelse添加新列

我想让我的代码更有效率,我有一个调查,我的数据如下:

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)

但是使用该代码需要一段时间,是否有更好的方法呢?

loops if-statement r survey dataframe

7
推荐指数
2
解决办法
528
查看次数

当某些元素是彼此的同义词时,计算唯一元素

我正在尝试计算此列表中的独特药物数量.

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个同义词.

r unique overlap synonym

7
推荐指数
1
解决办法
96
查看次数