小编Far*_*rel的帖子

什么.SD代表R中的data.table

.SD看起来很有用,但我真的不知道我在做什么.它代表什么?为什么会有前一段时间(句号).我用它时发生了什么?

我读到: .SD是一个data.table包含x每个组的数据子集,不包括组列.它可以在分组i时,分组by,键控by和_ad hoc_时使用by

这是否意味着女儿data.table被留在内存中进行下一次操作?

r data.table

159
推荐指数
3
解决办法
6万
查看次数

将具有看不见的字符串值的新记录附加到数据帧时看不见的因子级别,导致警告并导致NA

我有一个大型数据框(14552行乘15列),包含2001年至2007年的计费数据.我使用sqlFetch获取2008年的数据.为了将2008年数据附加到前7年的数据,可以如下进行

alltime <- rbind(alltime,all2008)

不幸的是,生成

警告消息:In alltime <- rbind(alltime,all2008)(alltime <- rbind(alltime,all2008),ri,value = c(NA,NA,NA,NA,NA,NA,NA,:无效因子级别,生成的NAs)

我的猜测是,有一些新病人的名字不在之前的数据框中,因此不知道给它的级别.类似于推荐医生专栏中新的看不见的名字.

R导入数据并自动计算出数字和非数据的方式(从而使其成为一个因素)很棒 - 直到你必须进一步操纵它然后它变得很痛苦.我如何优雅地克服我的问题?

r append dataframe r-factor

66
推荐指数
3
解决办法
10万
查看次数

如何在ggplot2中手动更改图例中的键标签

我正准备出版的情节.我创建了一个堆积的盒子图,显示每组患者的频率,这些患者是血清反应阴性的一些复杂积累.图例使用了数据框中的标签,这些标签适合我们正在处理项目但不适合发布的标签.我想将名称更改为读者更快速理解的内容.

例如,运行以下脚本

grp <- gl(n=4,k=20,labels=c("group a","group b","group c", "group d"))
value <- runif(n=80, min=10, max=150)
outcome <- cut(value,2)
data <- data.frame(grp,value,outcome)
ggplot(data, aes(grp, fill=outcome)) + geom_bar() +xlab("group") 
             +ylab("number of subjects") + labs(fill="Serologic response")
Run Code Online (Sandbox Code Playgroud)

该代码创建了不适合发布的关键标签"(10.4,80)"和"(80,150)".相反,我希望"双重否定"和"对a和/或b为正".

我想我可以回到数据框并转换为获得具有正确标签的新变量.或者我可以重新考虑我的因素?但是,我更愿意在绘图时这样做.

label r key ggplot2

37
推荐指数
2
解决办法
8万
查看次数

生成两个月中最后一天的序列

我使用lubridate并认为这将是如此简单

ymd("2010-01-31")+months(0:23)
Run Code Online (Sandbox Code Playgroud)

但看看会得到什么.这一切都搞砸了!

 [1] "2010-01-31 UTC" "2010-03-03 UTC" "2010-03-31 UTC" "2010-05-01 UTC" "2010-05-31 UTC" "2010-07-01 UTC" "2010-07-31 UTC" "2010-08-31 UTC" "2010-10-01 UTC"
[10] "2010-10-31 UTC" "2010-12-01 UTC" "2010-12-31 UTC" "2011-01-31 UTC" "2011-03-03 UTC" "2011-03-31 UTC" "2011-05-01 UTC" "2011-05-31 UTC" "2011-07-01 UTC"
[19] "2011-07-31 UTC" "2011-08-31 UTC" "2011-10-01 UTC" "2011-10-31 UTC" "2011-12-01 UTC" "2011-12-31 UTC"
Run Code Online (Sandbox Code Playgroud)

然后我读到了lubridate如何迎合间隔,持续时间和周期等现象.那么,好吧我知道一个月实际上是由(365*4 + 1)/ 48 = 30.438天定义的天数.所以我试图变得聪明并将其重写为

ymd("2010-01-31")+ as.period(months(0:23))
Run Code Online (Sandbox Code Playgroud)

但那只是一个错误.

Error in as.period.default(months(0:23)) : 
  (list) object cannot be coerced to type 'double'
Run Code Online (Sandbox Code Playgroud)

r date lubridate

37
推荐指数
2
解决办法
2万
查看次数

为什么中位数会绊倒data.table(整数与双数)?

我有一个名为enc.per.day的data.table,用于每天的遭遇.它有2403行,其中指定了服务日期和当天看到的患者数量.我希望看到在任何类型的工作日看到的患者中位数.

enc.per.day[,list(patient.encounters=median(n)),by=list(weekdays(DOS))]
Run Code Online (Sandbox Code Playgroud)

该行给出了错误

误差在[.data.table(enc.per.day,列表(patient.encounters =中间值(N)),:j的列不计算一致类型的每个组:导致对其组4具有第1分型"整数",但期待输入'double'

以下一切都很好

tapply(enc.per.day$n,weekdays(enc.per.day$DOS),median)
enc.per.day[,list(patient.encounters=round(median(n))),by=list(weekdays(DOS))]
enc.per.day[,list(patient.encounters=median(n)+0),by=list(weekdays(DOS))]
Run Code Online (Sandbox Code Playgroud)

到底是怎么回事?我花了很长时间才弄清楚为什么我的代码不起作用.

顺便说一句,底层向量enc.per.day $ n是一个整数

storage.mode(enc.per.day$n)
Run Code Online (Sandbox Code Playgroud)

返回"整数".此外,data.table中没有任何NA.

double integer r median data.table

30
推荐指数
1
解决办法
5514
查看次数

如何动态地从data.table中提取一些随机行

我有一个大的data.table(大约24000行和增长).我想根据几个标准对该数据表进行子集化,并从该子集(最终约为3000行)我想随机抽样4行.我不想创建一个名为3000左右的行data.table,计算其行数,然后根据行号进行采样.我怎么能在飞行中做到这一点?或者我应该通过创建表然后处理它,对其进行采样然后使用它rm()来摆脱它来吮吸它?

让我们模拟我的问题

require(data.table)
random.length  <-  sample(x = 15:30, size = 1)
data.table(city=sample(c("Cape Town", "New York", "Pittsburgh", "Tel Aviv", "Amsterdam"), size=random.length, replace = TRUE), score = sample(x=1:10, size = random.length, replace=TRUE)) 
Run Code Online (Sandbox Code Playgroud)

这会产生一个随机长度表,它模拟了这样一个事实,即根据我的标准并依赖于我的起始表,我不知道子集化表的长度是多少

现在,如果我只想要前三行我可以这样做

data.table(city=sample(c("Cape Town", "New York", "Pittsburgh", "Tel Aviv", "Amsterdam"), size=random.length, replace = TRUE), score = sample(x=1:10, size = random.length, replace=TRUE))[1:3]
Run Code Online (Sandbox Code Playgroud)

但是,让我们说我不想要前三行,而是一个随机的3行,然后我想做一些像这样的事情......

data.table(city=sample(c("Cape Town", "New York", "Pittsburgh", "Tel Aviv", "Amsterdam"), size=random.length, replace = TRUE), score = sample(x=1:10, size = random.length, replace=TRUE))[sample(x= 1:number of rows of that previous data.table,size …
Run Code Online (Sandbox Code Playgroud)

r sample data.table

27
推荐指数
1
解决办法
2万
查看次数

如何在R中的data.table中按两个条件选择行

假设我有一个data.table,我想选择变量x的值为b的所有行.这很容易

library(data.table)
DT <- data.table(x=rep(c("a","b","c"),each=3), y=c(1,3,6), v=1:9)
setkey(DT,x)               # set a 1-column key
DT["b"]
Run Code Online (Sandbox Code Playgroud)

顺便说一句,似乎必须设置一个键,如果键没有设置为x,那么这不起作用.顺便说一句,如果我将两列设为键,会发生什么?

无论如何,继续前进,让我说我想选择变量x是a或b的所有行

DT["b"|"a"]
Run Code Online (Sandbox Code Playgroud)

不起作用

但以下工作

DT[x=="a"|x=="b"]
Run Code Online (Sandbox Code Playgroud)

但是,它使用矢量扫描数据帧.它不使用二进制搜索.我想对于较小的数据集来说无关紧要.

这是我应该做的还是我对data.table语法一无所知?

还有一件事.是否有任何更复杂的布尔多变量选择(或子集)过程的例子与data.table?

我知道我总是可以恢复使用subset()函数,因为如果必须,data.table将表现为data.frame.

select r subset data.table

26
推荐指数
2
解决办法
3万
查看次数

使用RGoogleDocs时如何防止密码泄露?

我喜欢RGoogleDocs并且使用它很多.但是,我不喜欢一直输入密码.显然我可以在R脚本中输入密码,而不必再次输入密码.但这不可行,因为这意味着我的密码将在我的硬盘上保持未加密状态.此外,我与同事分享我的脚本.

为了解决这个问题,我提出了这个问题.

if(exists("ps")){
  print("got password, keep going")
} else {
  ps <-readline(prompt="get the password in ")
}

options(RCurlOptions = list(
  capath = system.file("CurlSSL", "cacert.pem", 
  package = "RCurl"), ssl.verifypeer = FALSE)
)

sheets.con = getGoogleDocsConnection(
  getGoogleAuth("notreal@gmail.com", ps, service ="wise")) 

#WARNING: this would prevent curl from detecting a 'man in the middle' attack
ts2=getWorksheets("hpv type",sheets.con)
Run Code Online (Sandbox Code Playgroud)

我喜欢使用RStudio.当我看到办公室里的任何同事显示我的密码时,我感到很不舒服.我使用了假密码,但看看图像.我的密码将在普通视图中供所有人在RStudio中查看.此外,如果我保存了一个工作区,我的密码会随之保存,如果几个月之后,当我很久以前忘记了它的内容时,我担心我会把它交给别人,我发送了我的.RData向同事提交.

我在之前的文章中读到了关于R中密码的一般信息.在使用RGoogleDocs时,它没有给我足够的信息来隐藏我的密码.

passwords r google-docs rstudio

25
推荐指数
2
解决办法
3980
查看次数

在R中的data.table中选择NA

如何选择数据表中主键中缺少值的所有行.

DT = data.table(x=rep(c("a","b",NA),each=3), y=c(1,3,6), v=1:9)
setkey(DT,x)   
Run Code Online (Sandbox Code Playgroud)

选择特定值很容易

DT["a",]  
Run Code Online (Sandbox Code Playgroud)

选择缺失值似乎需要矢量搜索.一个人不能使用二进制搜索.我对么?

DT[NA,]# does not work
DT[is.na(x),] #does work
Run Code Online (Sandbox Code Playgroud)

select r missing-data na data.table

23
推荐指数
2
解决办法
2万
查看次数

如何在data.table中进行否定/无匹配/反向搜索?

如果我想选择data.table中使用二进制搜索在键变量中不包含特定值的所有行,会发生什么?顺便问一下,我想做什么的正确行话是什么?它是"nojoin"吗?这是"消极选择"吗?

DT = data.table(x=rep(c("a","b","c"),each=3), y=c(1,3,6), v=1:9)
setkey(DT,x)
Run Code Online (Sandbox Code Playgroud)

让我们对x =="a"但使用二进制搜索的所有行进行正选择

DT["a"]
Run Code Online (Sandbox Code Playgroud)

这很美,但我希望与此相反.我想要所有不是"a"的行,换句话说x!="a"

DT[x!="a"]
Run Code Online (Sandbox Code Playgroud)

那是矢量扫描.以上线路工作但使用矢量扫描.我想用二进制文件.我期待以下工作,但唉......

DT[!"a"]
DT[-"a"]
Run Code Online (Sandbox Code Playgroud)

以上两个不起作用,尝试与无匹配发挥让我无处可去.

select r data.table

20
推荐指数
1
解决办法
6409
查看次数