假设有以下数据表:
DT <- data.table(a=c(1,2,3,4,5,6),b=c(NaN,NaN,NaN,4,5,6),c=c(NaN,3,3,3,NaN,NaN))
Run Code Online (Sandbox Code Playgroud)
如何将每列中的所有NaN
值替换为, 即?NA
寻找一种优雅(简短)的方法来做到这一点,但我也想知道是否可以使用lapply
,就像我在下面尝试的那样。
到目前为止我的方法:
DT[,lapply(SD,function(x){x[is.nan(x)] := NA}),.SDcols=c("a","b","c")]
Run Code Online (Sandbox Code Playgroud)
我的代码的实际结果是:
(x[is.nan(x)], NA)中的错误
:=
:检查 is.data.table(DT) == TRUE。否则,:= 和:=
(...) 被定义为在 j 中使用,仅一次且以特定方式使用。请参阅帮助(“:=”)。
我正在尝试通过页面在 R 中打印简单的输出,当前在 Windows 10 计算机上。过去它有效,现在不再有效。Windows通常会询问应该使用哪个程序打开该文件,但现在不再弹出窗口了。其他人也遇到这些问题,或者知道如何解决吗?可能与最新的大型 Windows 更新有关,但不一定如此。我使用 Rstudio 作为 IDE。
例子:
x <- data.frame(matrix(1:9,3,3))
page(x,method="print") # no effect
Run Code Online (Sandbox Code Playgroud)
Windows 10(家庭版),版本:10.0.18362 Build 18362。同时,将RStudio更新到最新版本1.2.1335(64位),R也更新到最新版本3.6.1(64位)。问题仍然出现。
编辑:使用 Windows 7 机器进行测试,Rstudio 最新版本 1.2.1335(64 位)。在这里工作得很好。问题似乎与 Windows 10 有关。
Edit2:使用不同的Windows 10(企业版)机器进行测试,版本:10.0.14393 Build 14393。这里工作正常。问题似乎与最新版本的 Windows 10 和/或家庭版与企业版有关。
有人提到实现依赖于系统。下面是 Windows 的实现:
page <-
function (x, method = c("dput", "print"), ...)
{
local.file.show <- function(file, title = subx, delete.file = TRUE,
pager = getOption("pager"), ...) file.show(file,
title = title, delete.file = delete.file, pager = pager)
local.dput <- function(x, file, …
Run Code Online (Sandbox Code Playgroud) 我有以下简单的data.table“ test”。我想选择X等于“ A”的第3至8行的所有行:
library(data.table)
set.seed(1)
test <- data.table(X=c(rep("A",5),rep("B",5)),Y=rnorm(10),Z=rnorm(10))
test[3:8 & X == "A"] # gives the not desired output:
1: A -0.6264538 1.5117812
2: A 0.1836433 0.3898432
3: A -0.8356286 -0.6212406
4: A 1.5952808 -2.2146999
5: A 0.3295078 1.1249309
Warning message:
In 3:8 & X == "A" :
longer object length is not a multiple of shorter object length
# desired outcome:
3: A -0.8356286 -0.62124058
4: A 1.5952808 -2.21469989
5: A 0.3295078 1.12493092
Run Code Online (Sandbox Code Playgroud)
在3:8行之间,我只选择X ==“ A”的那些。这怎么可能?请注意,使用test[3:8][X == "A"] …
我正在尝试将以下数据转换为 R 中的长格式:
testdata <- data.frame(rnorm(10),rnorm(10),rnorm(10))
rownames(testdata) <- paste0("ID",1:10) # Ids
colnames(testdata) <- c(2001,2002,2003) # Years
testdata
Run Code Online (Sandbox Code Playgroud)
所以列 = 时间,行 = ID。应该不会太难,但在所有示例中我发现情况恰恰相反。如何在任何其他流行的数据帧包中完成此datatable
操作reshape
?感谢您的任何提示。我知道一种通过转置数据的方法,但这似乎是实现此目的的一种相当低效的方法。