小编Rag*_*aac的帖子

在R中减去两个相同结构的列表

如何在R中减去两个相同结构的列表.以下函数创建数据集

dataSet <- function(x,y){
    data <- lapply(1:4, function(x)
           do.call(cbind,do.call(cbind,
                                 lapply(lapply(1:5,function(y)
                                               cbind(rnorm(10))), data.frame)) ))
    pVariatesNames <- paste("s",seq(from=380, length.out=5),sep="")
    nCasesNames <- c("Paper","R","G","B")
    customerNames <- paste("Customer",seq(from=1, length.out=10),sep=" ")
    names(data) <- nCasesNames
    for(i in 1:4) {
        colnames(data[[i]]) <- pVariatesNames
        rownames(data[[i]]) <- customerNames
    }
    return(data)
}
dataSet1 <- dataSet(4,5); dataSet1
dataSet2 <- dataSet(4,5); dataSet2
Run Code Online (Sandbox Code Playgroud)

我想从dataSet2中减去dataSet1

r

9
推荐指数
1
解决办法
5320
查看次数

将文本文件导入R

我有一个文本文件,其中包含超过100,000行,我每周从SAP下载.它被下载为页面,每个页面包含相同的标题和虚线.下面是一个包含两个页面的最小示例,每个页面只包含两个项目

------------------------------------------------------------
|date              |Material          |Description         |
|----------------------------------------------------------|
|10/04/2013        |WM.5597394        |PNEUMATIC           |
|11/07/2013        |GB.D040790        |RING                |
------------------------------------------------------------

------------------------------------------------------------
|date              |Material          |Description         |
|----------------------------------------------------------|
|08/06/2013        |WM.4M01004A05     |TOUCHEUR            |
|08/06/2013        |WM.4M010108-1     |LEVER               |
------------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)

我想要做的是将此文件导入到R中,只有一个标题,没有虚线.我试过了:

read.table( "myfile.txt",  sep = "|", fill=TRUE)
Run Code Online (Sandbox Code Playgroud)

非常感谢

r

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

如何将多个[] []与多个键链接在一起

我想基于一列中的匹配来分配数据data.table, J()并且使用和!J()函数不匹配

library(data.table)
DT <- data.table(x = rep(c("a", "b", "c"), each=2000), y=c(rep(c(1,3,6), each = 1)) , key = c("x", "y"))
Run Code Online (Sandbox Code Playgroud)

我希望J()!J()函数提供与下面代码相同的结果:

DT[J("b")][y !=1] 
Run Code Online (Sandbox Code Playgroud)

我尝试了以下内容,它给出了以下错误:

DT[J("b")][!J(x, 1)]

Error in vecseq(f__, len__, if (allow.cartesian) NULL else as.integer(max(nrow(x),  : 
  Join results in 1920000 rows; more than 4800 = max(nrow(x),nrow(i)). Check for duplicate key values in i, each of which join to the same group in x over and over again. If that's ok, try …
Run Code Online (Sandbox Code Playgroud)

r data.table

6
推荐指数
1
解决办法
112
查看次数

从数据帧转换到数据表我得到一个错误的头(..)

以下是显示问题的可重现示例:

openSummary <- read.table(textConnection(
"Dates          dollarA         numTotal
7/3/2011    52730.56    1614
7/10/2011   77709.43    1548"), header = TRUE)
openSummary$Dates <- strptime(openSummary$Dates,"%m/%d/%Y")
str(openSummary)
head(openSummary) # No problem

openSummaryDT <- data.table(openSummary)
str(openSummaryDT)
head(openSummaryDT) # An error is produced
Run Code Online (Sandbox Code Playgroud)

这是执行head时的错误(openSummaryDT)

Error in `rownames<-`(`*tmp*`, value = paste(format(rn, right = TRUE),  : 
length of 'dimnames' [1] not equal to array extent 
Run Code Online (Sandbox Code Playgroud)

请解释错误,我该如何避免.但是,似乎我可以对数据帧和数据表进行一些操作,并得到相同的结果.

difftime(Sys.Date(), openSummary[ ,"Dates"])
difftime(Sys.Date(), openSummaryDT[ ,Dates])
Run Code Online (Sandbox Code Playgroud)

先感谢您

r dataframe data.table

3
推荐指数
1
解决办法
1059
查看次数

如何在不使用data.table的情况下展平列表中的两个列表?

我想从列表中的列表中形成一个data.frame

L1 <- list(A = c(1, 2, 3), B = c(5, 6, 7))
L2 <- list(A = c(11, 22, 33), B = c(15, 16, 17))
L3 <- list(L1, L2)
L3

library(data.table)
Run Code Online (Sandbox Code Playgroud)

根据'data.table'手册:"'rbindlist'与do.call("rbind",l)相同,但更快"

我想用R base包来实现'rbindlist'的功能

rbindlist正是我需要的,但'do.call'却没有!

rbindlist(L3)
Run Code Online (Sandbox Code Playgroud)

do.call没有做我想做的事

do.call(rbind, L3)

identical(rbindlist(L3), do.call(rbind, L3))
Run Code Online (Sandbox Code Playgroud)

r data.table

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

For loop忽略我的第一个项目

如果你能帮我解决以下两个问题,我将不胜感激:

  1. 下面的'for'循环忽略了我的第一个循环项.下面的代码只是我程序的一小部分.在这里,我使用函数'Grep'迭代对象'num'并循环'mySet',该函数标记mySet中的某些项.

除了'num'对象的第一个元素'0'之外,'for'循环起作用.因此,它在mySet中找不到任何以'0'开头的项目.

num <- c(0,2,4,6,8,10,15,20,30,40,45,50,55,60,65,70,80,85,90,92,94,96,98,100)
mySet <- c("0.C.A", "2.C.A", "4.C.A", "6.C.A", "8.C.A", "10.C.A", "15.C.A", "20.C.A",
           "30.C.A", "40.C.A", "45.C.A", "50.C.A", "55.C.A", "60.C.A", "65.C.A", "70.C.A",
           "80.C.A", "85.C.A", "90.C.A", "92.C.A", "94.C.A", "96.C.A", "98.C.A", "100.C.A")
varLoop <- c()
Grep <- function(num)grep(paste("^" , num, "\\.", sep=""), mySet, value = TRUE)
for(i in num){
    varLoop[i] <- Grep(i)
    print(varLoop[i])}
Run Code Online (Sandbox Code Playgroud)
  1. 如果我修改脚本如下,第二个问题是不完整的输出和警告.警告是:'要替换的项目数不是替换长度的倍数'.不完整的输出不包括以字母B结尾的任何项目

下面的脚本会产生问题:

num <- rep(c(0,2,4,6,8,10,15,20,30,40,45,50,55,60,65,70,80,85,90,92,94,96,98,100), 2)
mySet <- c("0.C.A", "2.C.A", "4.C.A", "6.C.A", "8.C.A", "10.C.A", "15.C.A", "20.C.A",
           "30.C.A", "40.C.A", "45.C.A", "50.C.A", "55.C.A", "60.C.A", "65.C.A", "70.C.A",
           "80.C.A", "85.C.A", "90.C.A", …
Run Code Online (Sandbox Code Playgroud)

r

0
推荐指数
1
解决办法
170
查看次数

将函数应用于数据框或多个列表

根据评论编辑: OP想要计算:

(100 *  (1 - 10 ^ - (Do - Do[Do==0] )) ? (1 - 10 ^ - (Do[Do==100] - Do[Do==0]) - Do
Run Code Online (Sandbox Code Playgroud)

对于的每个组合Cl,In,Sadata.frame
-RS


我正在尝试将一个名为dG的函数应用于数据帧.由于函数的参数长度不同,回收产生了不可预测的结果.

为了解决这个问题,我将数据帧分成了列表,并尝试在使用名为"ids"的函数识别每个列表后,将dG函数(下面)应用于每个列表.

  • 请随意提出不同的解决方案.仅供参考,我的具体要求以项目符号开头

请让我首先提供显示问题的综合数据:

Do <- rep(c(0,2,4,6,8,10,15,20,30,40,45,50,55,60,65,70,80,85,90,92,94,96,98,100), each=16,times=16)
Cl <- rep(c("K", "Y","M","C"), each= 384, times=4)
In <- rep(c("A", "S"), each=3072)
Sa <- rep(c(1,2), each=1536)
Data <- rnorm(6144)
DataFrame <- cbind.data.frame(Do,Cl,In,Sa,Data); head(DataFrame)
rm(Do,Cl,In,Sa,Data)
attach(DataFrame)

DFSplit <- split(DataFrame[ , "Data"], list(Do, Cl, In, Sa))
Run Code Online (Sandbox Code Playgroud)

函数'ids'是一个帮助函数,用于标识列表名称

ids <- function(Do, Cl, …
Run Code Online (Sandbox Code Playgroud)

r

0
推荐指数
1
解决办法
301
查看次数

do.call(namespace:base)和rbindlist(namespace:data.table)不一样

如何让do.call(namespace:base)和rbindlist(namespace:data.table)表现相同.rbindlist消除了因子水平,而do.call则没有.以下显示了该问题

(dataList <- list(data.frame(f1=rep(c("a"), each=1),"c"=rnorm(2),"d"=rnorm(2)),
                      data.frame(f1=rep(c("b"), each=1),"c"=rnorm(2),"d"=rnorm(2))) )

(rbindlist.Data <- rbindlist(dataList)) # combines lists into ONE data.frame same as above
(do.call.Data <- do.call(rbind, dataList))
Run Code Online (Sandbox Code Playgroud)

r data.table

0
推荐指数
1
解决办法
265
查看次数

标签 统计

r ×8

data.table ×4

dataframe ×1