小编Chr*_*ris的帖子

在巨大的XML文件中组合值

我需要在一些巨大的XML文件中找到并组合信息(doc < - xmlInternalTreeParse(file.name,useInternalNodes = TRUE,trim = TRUE)导致我的16GB计算机在完成之前开始交换到磁盘),并且遵循了良好的指令在http://www.omegahat.org/RSXML/Overview.html上.

从那里添加示例,这或多或少是我的文件的样子:

<?xml version="1.0" ?>
<TABLE>
  <SCHOOL>
    <NAME> School1 </NAME>
    <GRADES>
      <STUDENT> Fred </STUDENT>
      <TEST1> 66 </TEST1>
      <TEST2> 80 </TEST2>
      <FINAL> 70 </FINAL>
    </GRADES>
    <TEAMS>
      <SOCCER> SoccerTeam1 </SOCCER>
      <HOCKEY> HockeyTeam1 </HOCKEY>
    </TEAMS>
  </SCHOOL>
  <SCHOOL>
    <NAME> School2 </NAME>
    <GRADES>
      <STUDENT> Wilma </STUDENT>
      <TEST1> 97 </TEST1>
      <TEST2> 91 </TEST2>
      <FINAL> 98 </FINAL>
    </GRADES>
    <TEAMS>
      <SOCCER> SoccerTeam2 </SOCCER>
    </TEAMS>
  </SCHOOL>
</TABLE>
Run Code Online (Sandbox Code Playgroud)

我需要为每个学校的学生列出曲棍球队和队名.示例中所需的输出应为"Fred","HockeyTeam1","School1".真实的例子有成千上万的"学校","曲棍球队"和"球员".

如何使用xmlEventParse解析文件以提取信息?我试图从文件中提取所有文本字段,但经过几个小时的等待后仍然没有输出.注意:真实文件比这更嵌套,因此不需要步骤固定级别来查找信息.

xml r

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

每行的data.table函数太慢了

我需要计算每行的加权平均值(6M +行),但这需要很长时间.带权重的列是字符字段,因此加权.不能直接使用.

后台数据:

library(data.table)
library(stringr)
values <- c(1,2,3,4)
grp <- c("a", "a", "b", "b")
weights <- c("{10,0,0,0}", "{0,10,0,0}", "{10,10,0,0}", "{0,0,10,0}")
DF <- data.frame(cbind(grp, weights))
DT <- data.table(DF)

string.weighted.mean <- function(weights.x) {
  tmp.1 <- na.omit(as.numeric(unlist(str_split(string=weights.x, pattern="[^0-9]+"))))
  tmp.2 <- weighted.mean(x=values, w=tmp.1)
}
Run Code Online (Sandbox Code Playgroud)

以下是使用data.frames完成(太慢)的方法:

DF$wm <- mapply(string.weighted.mean, DF$weights)
Run Code Online (Sandbox Code Playgroud)

这样做的工作太慢了(几个小时):

DT[, wm:=mapply(string.weighted.mean, weights)]
Run Code Online (Sandbox Code Playgroud)

如何改写最后一行来加快速度?

r data.table

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

修剪data.table列中的空白

我使用fread导入非常大的.CSV文件。有些列在我需要删除的文本后面有空格。这会花费太多时间(小时)。

以下代码可以工作,但是system.time上的命令非常慢(在我的计算机上大约为12秒,而实际文件要大得多)。

library(data.table)
library(stringr)

# Create example-data
df.1 <- rbind(c("Text1        ", 1, 2), c("Text2        ", 3, 4), c("Text99       ", 5, 6))

colnames(df.1) <- c("Tx", "Nr1", "Nr2")
dt.1 <- data.table(df.1)
for (i in 1:15) {
  dt.1 <- rbind(dt.1, dt.1)
}

# Trim the "Tx"-column
dt.1[, rowid := 1:nrow(dt.1)]
setkey(dt.1, rowid)
system.time( dt.1[, Tx2 :={ str_trim(Tx) }, by=rowid] )
dt.1[, rowid:=NULL]
dt.1[, Tx:=NULL]
setnames(dt.1, "Tx2", "Tx")
Run Code Online (Sandbox Code Playgroud)

有没有更快的方法来修剪data.tables中的空格?

r data.table

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

必须加快逐行操作

我需要进行超过1500万次的行操作,但代码太慢.这是一个可重复的小例子:

costMatrix1 <- rbind(c(4.2,3.6,2.1,2.3),c(9.6,5.5,7.2,4.9),c(2.6,8.2,6.4,8.3),c(4.8,3.3,6.8,5.7))
costMatrix2 <- costMatrix1 #Example, the costMatrix2 is actually different from costMatrix1

tbl_Filter <- rbind(c(0,0,0,4),c(1,2,3,4),c(1,0,3,0),c(1,2,0,0),c(1,2,0,4))

tbl_Sums <- data.frame(matrix(0, nrow=10, ncol=2))
colnames(tbl_Sums) <- c("Sum1","Sum2")

for (i in 1:nrow(tbl_Filter))
{
  tbl_Sums[i,1] <- sum(costMatrix1[tbl_Filter[i,],tbl_Filter[i,]])
  tbl_Sums[i,2] <- sum(costMatrix2[tbl_Filter[i,],tbl_Filter[i,]])
}
Run Code Online (Sandbox Code Playgroud)

我认为用ddply替换for循环是解决方案,但我无法让它工作.

r

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

直接从JSON文件获取数据帧?

首先,让我感谢所有为Stackoverflow和R做出贡献的人!我是那些不太擅长编程的R用户之一,但勇敢地尝试将它用于工作,所以下面的问题可能是微不足道的......

这是问题所在.我需要将JSON格式的文件导入R:

# library(plyr)
# library(RJSONIO)
# lstJson <- fromJSON("JSON_test.json")        #This is the file I read
# dput(lstJson)                                              #What I did to get the txtJson below, for the benefit of testing.

txtJson <- structure(list(version = "1.1", result = structure(list(warnings = structure(list(), class = "AsIs"), fields = list(structure(list(info = "", rpl = 15, name = "time", type = "timeperiod"), .Names = c("info", "rpl", "name", "type")), structure(list(info = "", name = "object", type = "string"), .Names = c("info", "name", "type")), structure(list(info = …
Run Code Online (Sandbox Code Playgroud)

json r

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

适合上下百分位线

我有或多或少看起来像这样的数据(不知道如何粘贴图):

library(reshape2)
library(ggplot2)

df <- cbind(runif(2000,0,1000), rep(0,n=2000))
for (i in 1:nrow(df)) {
  df[i,2] <- runif(1, df[i,1], (10000-2*df[i,1])) 
}
colnames(df) <- c("x","y")
df.1 <- melt(data.frame(df), id="x")

p <- ggplot(df.1, aes(x=x, y=value))
p <- p + geom_point()
p <- p + geom_smooth()
p
Run Code Online (Sandbox Code Playgroud)

而不是显示的平滑线,我需要在底部5%的一条直线和在顶部95%的一条直线.一个问题是我有数百万点,所以我认为data.table是一个很好的前进方式:

library(data.table)
dt <- data.table(df)
dt[,xbin:=0]
for (i in 0:100) {
  x1 <- i*100
  x2 <- (i+1)*100
  dt[x>=x1 & x<x2, xbin:=x2]
}
setkey(dt,xbin)
result1.dt <- dt[,list(ymin=min(y), ymax=max(y)), by=key(dt)]
result1.df <- data.frame(result1.dt)

p <- p + geom_line(data=result1.df, aes(x=xbin, y=ymin))
p …
Run Code Online (Sandbox Code Playgroud)

r ggplot2 data.table

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

加快矢量创作

我需要创建一个向量,其中所有数字都在表中定义的范围内.例如,行23:25和34:39将成为单个向量c(23, 24, 25, 34, 35, 36, 37, 38, 39)

下面的MWE做到了这一点,但速度太慢了.我需要做15,000,000或更高的n.rows.

row.references是输入.row.references.long是想要的输出.

有什么更好的代码来做到这一点?

library(data.table)
# Create example data
n.rows <- 1000
row.references <- data.table(start.number=floor(runif(n=n.rows, min=1, max=100)), steps=floor(runif(n=n.rows, min=1, max=50)))
row.references[, end.number:=start.number+steps]
row.references[, steps:=NULL]
row.references.long <- NULL
# The too-slow code
for (i in 1:nrow(row.references)) {
  row.references.long <- rbind(row.references.long, data.table(row.references[i, start.number]:row.references[i, end.number]))
}
Run Code Online (Sandbox Code Playgroud)

我想data.table是要走的路.

r data.table

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

如何将 Flextable 中的数字字段设为空白

如以下 MWE 所示,香蕉数量处的 NA 如何变为空白而不是显示“NA”?我希望数字列像字符列一样工作(请参阅 MWE 中的苹果颜色)。

library(data.table)
library(flextable)
the.data <- data.table(Fruit=c("Apples", "Oranges", "Bananas", "Pears"), Amount=c(4L, 8L, NA_integer_, 2L), Color=c(NA_character_, "Orange", "Yellow", "Green"))
the.ft <- flextable(the.data)
the.ft
Run Code Online (Sandbox Code Playgroud)

一种方法是将数字列转换为字符,但也许有更好的方法。

r flextable

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

标签 统计

r ×8

data.table ×4

flextable ×1

ggplot2 ×1

json ×1

xml ×1