在给定条件的情况下,如何替换data.table中的所有值?
例如
ppp <- data.table(A=1:6,B=6:1,C=1:6,D=3:8)
A B C D
1 6 1 3
2 5 2 4
3 4 3 5
4 3 4 6
5 2 5 7
6 1 6 8
Run Code Online (Sandbox Code Playgroud)
我想用NA替换所有"6"
A B C D
1 NA 1 3
2 5 2 4
3 4 3 5
4 3 4 NA
5 2 5 7
NA 1 6 8
Run Code Online (Sandbox Code Playgroud)
我尝试过类似的东西
ppp[,ifelse(.SD==6,NA,.SD)]
Run Code Online (Sandbox Code Playgroud)
但它不起作用,它会产生更宽的表格.
想象一下,我有一个这样的数据帧(或所有月份的名称)
set.seed(1)
mydata <- data.frame()
mydata <- rbind(mydata,c(1,round(runif(20),3)))
mydata <- rbind(mydata,c(2,round(runif(20),3)))
mydata <- rbind(mydata,c(3,round(runif(20),3)))
colnames(mydata) <- c("id", paste0(rep(c('Mary', 'Bob', 'Dylan', 'Tom', 'Jane', 'Sam', 'Tony', 'Luke', 'John', "Pam"), each=2), 1:2))
Run Code Online (Sandbox Code Playgroud)
.
id Mary1 Mary2 Bob1 Bob2 Dylan1 Dylan2 Tom1 Tom2 Jane1 Jane2 Sam1 Sam2 Tony1 Tony2 Luke1 Luke2 John1 John2 Pam1 Pam2
1 0.266 0.372 0.573 0.908 0.202 0.898 0.945 0.661 0.629 0.062 0.206 0.177 0.687 0.384 0.770 0.498 0.718 0.992 0.380 0.777
2 0.935 0.212 0.652 0.126 0.267 0.386 0.013 …Run Code Online (Sandbox Code Playgroud) 我正在使用大型数据集,并且R经常会产生错误,告诉它无法分配该大小的向量,或者它没有足够的内存.
我的计算机有16GB内存(Windows 10),我正在处理大约4GB的数据集,但有些操作需要大量内存,例如将数据集从宽格式转换为长格式.在某些情况下,我可以使用gc()来释放一些内存,但很多时候它还不够.
有时我可以在较小的块上打破数据集,但有时我需要同时处理所有表.
我读过Linux用户没有这个问题,但是Windows呢?
我已经尝试在SSD(200GB)上设置大页面文件,但我发现R根本不使用它.
我可以看到任务管理器,当内存消耗达到16GB时R停止工作.页面文件的大小似乎没有任何区别.
如何强制R使用页面文件?我需要用一些特殊标志自己编译吗?
PD:我的经验是删除对象rm()以及稍后使用gc()不会恢复所有内存.当我使用大型数据集执行操作时,无论我是否使用gc(),我的计算机在每一步都有越来越少的可用内存.
PD2:我希望不会听到像"你需要更多RAM内存"这样的简单解决方案
PD3:我一直在测试,问题只发生在Rstudio中.如果我直接使用R它运作良好.有人知道如何在RStudio中做到这一点.
如何使用R包zoo或具有非常大的数据集的xts?(100GB)我知道有一些软件包如bigrf,ff,bigmemory可以处理这个问题,但你必须使用他们有限的命令集,他们没有动物园或xts的功能,我不知道如何让zoo或xts使用它们.我怎么用呢?
我已经看到还有其他一些与数据库相关的东西,比如sqldf和hadoopstreaming,RHadoop,或者革命R使用的其他东西.你有什么建议?,还有其他吗?
我只是想要聚集系列,清理并执行一些协整和绘图.我不想为每个需要的命令编写和实现新函数,每次都使用小块数据.
补充:我在Windows上
如何使用dplyr获取data.frame上每行的最小值(或平均值)?我的意思是同样的结果
apply(mydataframe, 1, mean)
apply(mydataframe, 1, min)
Run Code Online (Sandbox Code Playgroud)
我试过了
mydataframe %>% rowwise() %>% mean
Run Code Online (Sandbox Code Playgroud)
要么
mydataframe %>% rowwise() %>% summarise(mean)
Run Code Online (Sandbox Code Playgroud)
或其他组合,但我总是得到错误,我不知道正确的方法.
我知道我也可以使用rowMeans,但没有简单的"rowMin"等价物.还有一个matrixStats包,但大多数函数不接受data.frames,只接受矩阵.
如果我想计算行的最小值,我可以使用
do.call(pmin,mydataframe)对于行方法有什么简单的吗?
do.call(mean, mydataframe)
Run Code Online (Sandbox Code Playgroud)
不起作用,我想我需要一个pmean函数或更复杂的东西.
谢谢
为了比较结果,我们都可以在同一个例子上工作:
set.seed(124)
df <- data.frame(A=rnorm(10), B=rnorm(10), C=rnorm(10))
Run Code Online (Sandbox Code Playgroud) 我正在使用openxlsx包来读写Excel文件.
我注意到,当我的表导出到Excel与write.xlsx(迈德特,文件="MyFile.xlsx") 来港定居显示为#NUM!在Excel上打开文件时.
有没有选择将其导出为空白?我正在使用谷歌搜索和尝试showNA或keepNA等选项,但它们似乎没有任何影响.
我想转换这样的表 (*):
set.seed(1)
mydata <- data.frame(ID=rep(1:4, each=3), R=rep(1:3, times=4), FIXED=rep(runif(4), each=3), AAA=rnorm(12), BBB=rbinom(12,12,0.5), CCC=runif(12))
ID R FIXED AAA BBB CCC
1 1 0.26 -0.83 8 0.82
1 2 0.26 1.59 5 0.64
1 3 0.26 0.32 6 0.78
2 1 0.37 -0.82 6 0.55
2 2 0.37 0.48 6 0.52
2 3 0.37 0.73 4 0.78
3 1 0.57 0.57 8 0.02
3 2 0.57 -0.30 7 0.47
3 3 0.57 1.51 7 0.73
4 1 0.90 0.38 4 0.69 …Run Code Online (Sandbox Code Playgroud) 我创造了一个例子 data.table
library(data.table)
set.seed(1)
siz <- 10
my <- data.table(
AA=c(rep(NA,siz-1),"11/11/2001"),
BB=sample(c("wrong", "11/11/2001"),siz, prob=c(1000000,1), replace=T),
CC=sample(siz),
DD=rep("11/11/2001",siz),
EE=rep("HELLO", siz)
)
my[2,AA:=1]
NA wrong 3 11/11/2001 HELLO
1 wrong 2 11/11/2001 HELLO
NA wrong 6 11/11/2001 HELLO
NA wrong 10 11/11/2001 HELLO
NA wrong 5 11/11/2001 HELLO
NA wrong 7 11/11/2001 HELLO
NA wrong 8 11/11/2001 HELLO
NA wrong 4 11/11/2001 HELLO
NA wrong 1 11/11/2001 HELLO
11/11/2001 wrong 9 11/11/2001 HELLO
Run Code Online (Sandbox Code Playgroud)
如果我运行此代码
patt <- "^\\d\\d?/\\d\\d?/\\d{4}$"
sapply(my, function(x) (grepl(patt,x )))
Run Code Online (Sandbox Code Playgroud)
TRUE …
想象一下,我有一个data.table,例如:
library(data.table)
RRR <-data.table(1:15,runif(15),rgeom(15,0.5),rbinom(15,2,0.5))
V1 V2 V3 V4
1: 1 0.33577273 0 0
2: 2 0.66739739 2 1
3: 3 0.07501655 0 0
4: 4 0.43195663 2 1
5: 5 0.39525841 3 2
6: 6 0.15189738 1 1
7: 7 0.02637279 0 1
8: 8 0.44165623 0 1
9: 9 0.98710570 2 0
10: 10 0.62402805 1 0
11: 11 0.84829465 3 2
12: 12 0.02170976 0 1
13: 13 0.74608925 0 2
14: 14 0.29102296 2 0
15: 15 …Run Code Online (Sandbox Code Playgroud)