小编Rod*_*igo的帖子

对名称以模式开头的所有列进行求和的最有效方法是什么?

我的目标是要总结在与前缀开头列所有值skill_data.table.我更喜欢使用解决方案,data.table但我并不挑剔.

我的解决方案到目前为止:

> require(data.table)
> DT <- data.table(x=1:4, skill_a=c(0,1,0,0), skill_b=c(0,1,1,0), skill_c=c(0,1,1,1))
> DT[, row_idx := 1:nrow(DT)]
> DT[, count_skills := 
          sapply(1:nrow(DT), 
                 function(id) sum(DT[row_idx == id, 
                                     grepl("skill_", names(DT)), with=FALSE]))]

> DT
   x skill_a skill_b skill_c row_idx count_skills
1: 1       0       0       0       1            0
2: 2       1       1       1       2            3
3: 3       0       1       1       3            2
4: 4       0       0       1       4            1
Run Code Online (Sandbox Code Playgroud)

但是当DT非常大时,这变得非常慢.有没有更有效的方法来做到这一点?

r data.table

10
推荐指数
4
解决办法
3306
查看次数

如何在面板数据回归中处理NA?

我试图预测包含NAs的数据的拟合值,并基于生成的模型plm.这是一些示例代码:

require(plm)
test.data <- data.frame(id=c(1,1,2,2,3), time=c(1,2,1,2,1), 
   y=c(1,3,5,10,8), x=c(1, NA, 3,4,5))
model <- plm(y ~ x, data=test.data, index=c("id", "time"), 
       model="pooling", na.action=na.exclude)
yhat <- predict(model, test.data, na.action=na.pass)
test.data$yhat <- yhat
Run Code Online (Sandbox Code Playgroud)

当我运行最后一行时,我收到一条错误,指出替换有4行而数据有5行.

我不知道如何获得预测返回长度为5的向量...

如果不是运行plm我运行lm(如下面的行),我得到预期的结果.

model <- lm(y ~ x, data=test.data, na.action=na.exclude)
Run Code Online (Sandbox Code Playgroud)

r predict na panel-data plm

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

如何在org-mode中逐行评估代码?

我希望能够在组织缓冲区中的一大块代码中逐行执行代码.我的目标是逐行执行代码,而不必一次在块中运行所有代码(Cc Cc),而无需切换到特殊缓冲区(Cc').我使用R,但它可以应用于任何其他语言.有没有办法做到这一点?

示例:仅执行以下代码块中的第一行,以便变量a在会话中获得值7.

#+BEGIN_SRC R :session
a <- 3 + 4 
a <- 5 + 6
#+END_SRC
Run Code Online (Sandbox Code Playgroud)

emacs org-mode org-babel

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

ESS不能很好地处理data.table和knitr

data.table[...]在使用时评估内部变量时遇到了麻烦knitr.我已经看到这个问题的答案说它已经解决了,但我仍然遇到错误.我data.table在R 3.0.0上使用的是1.8.8版.

我正在使用ESS 13.05附带的Emacs 24.3.这是一个示例.Rnw文件:

\documentclass{article}

\begin{document}  

<<init,eval=TRUE, cache=FALSE>>=
require(data.table)
dt <- data.table(x=1:10, y=11:20)
dt
dt[x > 5]
@

\end{document}
Run Code Online (Sandbox Code Playgroud)

和相应的(pdf)输出:

require(data.table)
## Loading required package: data.table
## data.table 1.8.8  For help type:  help("data.table")
dt <- data.table(x = 1:10, y = 11:20)

dt
##    x  y
## 1: 1 11
## 2: 2 12
## 3: 3 13
## 4: 4 14
## 5: 5 15
## 6: 6 16
## 7: 7 17 …
Run Code Online (Sandbox Code Playgroud)

r ess knitr data.table

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

使用rbind合并data.tables时出错,其中一个是空的

将三个(或更多)data.tables与rbind合并时发出错误,并且两个非空data.tables之间存在空data.table:

> require(data.table)
Loading required package: data.table
data.table 1.9.2  For help type: help("data.table")

> DT <- data.table(x=c(1,2,3))
> rbind(DT, data.table(), DT)
Error in setcolorder(tt, chmatch(match.names, make.names(original.names[[x]],  (from <text>#1) : 
  Column numbers in neworder out of bounds: NA
Run Code Online (Sandbox Code Playgroud)

如果空data.table最终会发生这种情况:

> rbind(DT, DT, data.table()) 
   x
1: 1
2: 2
3: 3
4: 1
5: 2
6: 3
Run Code Online (Sandbox Code Playgroud)

但是当空的data.table在开头时会发生一些其他错误:

> rbind(data.table(), DT, DT) 
Error in data.table::.rbind.data.table(...) (from <text>#1) : 
  Some colnames of argument 2 (x) are not present in colnames of item 1. …
Run Code Online (Sandbox Code Playgroud)

r rbind data.table

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

如何调用一个返回data.table中多个行和列的函数?

我想在data.table中调用一个函数来计算一组汇总统计信息,如下所示:

summ.stats <- function(vec) {
    list(
         Min = min(vec),
         Mean = mean(vec),
         S.D. = sd(vec),
         Median = median(vec),
         Max = max(vec))
}
Run Code Online (Sandbox Code Playgroud)

我想把它j称为data.table:

DT <- data.table(a=c(1,2,3,1,2,3),b=c(1,4,3,2,1,4),c=c(2,3,4,5,2,1))

DT[, summ.stats(b), by=a]
Run Code Online (Sandbox Code Playgroud)

这很好,我得到:

   a Min Mean      S.D. Median Max
1: 1   1  1.5 0.7071068    1.5   2
2: 2   1  2.5 2.1213203    2.5   4
3: 3   3  3.5 0.7071068    3.5   4
Run Code Online (Sandbox Code Playgroud)

但我有兴趣将多个变量传递给summ.stats.例如:

DT[, summ.stats(b, c), by=a]
Run Code Online (Sandbox Code Playgroud)

我希望得到类似的东西:

   a Var Min Mean      S.D. Median Max
1: 1   b   1  1.5 0.7071068 …
Run Code Online (Sandbox Code Playgroud)

statistics r data.table

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

标签 统计

r ×5

data.table ×4

emacs ×1

ess ×1

knitr ×1

na ×1

org-babel ×1

org-mode ×1

panel-data ×1

plm ×1

predict ×1

rbind ×1

statistics ×1