小编Vin*_*ent的帖子

将pandas数据帧字符串条目拆分(爆炸)到单独的行

我有pandas dataframe一列文本字符串包含逗号分隔值.我想拆分每个CSV字段并为每个条目创建一个新行(假设CSV是干净的,只需要在','上拆分).例如,a应该成为b:

In [7]: a
Out[7]: 
    var1  var2
0  a,b,c     1
1  d,e,f     2

In [8]: b
Out[8]: 
  var1  var2
0    a     1
1    b     1
2    c     1
3    d     2
4    e     2
5    f     2
Run Code Online (Sandbox Code Playgroud)

到目前为止,我已经尝试了各种简单的函数,但是.apply当在轴上使用时,该方法似乎只接受一行作为返回值,而我无法.transform工作.我们欢迎所有的建议!

示例数据:

from pandas import DataFrame
import numpy as np
a = DataFrame([{'var1': 'a,b,c', 'var2': 1},
               {'var1': 'd,e,f', 'var2': 2}])
b = DataFrame([{'var1': 'a', 'var2': 1},
               {'var1': 'b', 'var2': 1},
               {'var1': 'c', …
Run Code Online (Sandbox Code Playgroud)

python numpy dataframe pandas

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

model.matrix()与na.action = NULL?

我有一个公式和一个数据框,我想提取model.matrix().但是,我需要生成的矩阵包含在原始数据集中找到的NA.如果我model.frame()这样做,我会简单地通过它na.action=NULL.但是,我需要的输出是model.matrix()格式.具体来说,我只需要右侧变量,我需要输出为矩阵(不是数据帧),我需要将因子转换为一系列虚拟变量.

我确信我可以使用循环或其他东西一起破解某些东西,但我想知道是否有人可以建议更清洁,更有效的解决方法.非常感谢你的时间!

这是一个例子:

dat <- data.frame(matrix(rnorm(20),5,4), gl(5,2))
dat[3,5] <- NA
names(dat) <- c(letters[1:4], 'fact')
ff <- a ~ b + fact

# This omits the row with a missing observation on the factor
model.matrix(ff, dat) 

# This keeps the NA, but it gives me a data frame and does not dichotomize the factor
model.frame(ff, dat, na.action=NULL) 
Run Code Online (Sandbox Code Playgroud)

这是我想要获得的:

   (Intercept)          b fact2 fact3 fact4 fact5
1            1  0.7266086     0     0     0     0
2            1 …
Run Code Online (Sandbox Code Playgroud)

r matrix na

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

Rcpp矩阵:循环遍历行,一次一列

这是我第一次尝试Rcpp,这个非常简单的问题给了我麻烦.我想使用嵌套for循环来操作矩阵的各个值,一次一列.我瞄准的脚本看起来像这样:

src <- '
    Rcpp::NumericMatrix Am(A);
    int nrows = Am.nrow();
    int ncolumns = Am.ncol();
    for (int i = 0; i < ncolumns; i++){
        for (int j = 1; j < nrows; j++){
            Am[j,i] = Am[j,i] + Am[j-1,i];
        }
    }
    return Am;
'
fun <- cxxfunction(signature(A = "numeric"), body = src, plugin="Rcpp")
fun(matrix(1,4,4))
Run Code Online (Sandbox Code Playgroud)

期望的输出是这样的:

     [,1] [,2] [,3] [,4]
[1,]    1    1    1    1
[2,]    2    2    2    2
[3,]    3    3    3    3
[4,]    4    4    4    4
Run Code Online (Sandbox Code Playgroud)

问题显然在这一行,我不知道如何引用矩阵的各个元素.

Am[j,i] = …
Run Code Online (Sandbox Code Playgroud)

r rcpp

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

R&Fortran电话

我没有使用Fortran的经验,但是我试图通过使用.Fortran()函数从R调用它来运行该语言中的一个非常简单的循环.每当我运行下面粘贴的R代码的最后一行时,R gui崩溃,我得不到任何结果.我有兴趣将Fortran的实数x向量带回R进行进一步分析.g是0到1之间的数值,n是整数,它们都是由用户在R中提供的.

任何帮助将非常感激!最好,

文森特

保存在bar.f中的Fortran代码:

    subroutine bar(n, g, x)

      integer n
      double precision g
      double precision x(n)
      integer i
      x(1)=1
      do 100 i = 2, n
          x(i) = x(i-1) * g + 1
  100 continue

      end
Run Code Online (Sandbox Code Playgroud)

使用gfortran在Cygwin中编译DLL:

gfortran -shared -obar.dll bar.f
Run Code Online (Sandbox Code Playgroud)

R代码:

dyn.load("d:/bar.dll")
is.loaded("bar")
.Fortran("bar", n=as.integer(15), g=as.double(5), x=as.double(rnorm(5)))
Run Code Online (Sandbox Code Playgroud)

fortran r

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

雪,内联和Rcpp:

我编写了一个函数Rcpp并用它编译inline.现在,我想在不同的内核上并行运行它,但是我遇到了一个奇怪的错误.这里有一个小例子,其中功能funCPP1可以编译和运行本身很好,但不能被调用snowclusterCall函数.该函数作为单个进程运行良好,但在并行运行时会出现以下错误:

Error in checkForRemoteErrors(lapply(cl, recvResult)) : 
  2 nodes produced errors; first error: NULL value passed as symbol address
Run Code Online (Sandbox Code Playgroud)

以下是一些代码:

## Load and compile
library(inline)
library(Rcpp)
library(snow)
src1 <- '
     Rcpp::NumericMatrix xbem(xbe);
     int nrows = xbem.nrow();
     Rcpp::NumericVector gv(g);
     for (int i = 1; i < nrows; i++) {
      xbem(i,_) = xbem(i-1,_) * gv[0] + xbem(i,_);
     }
     return xbem;
'
funCPP1 <- cxxfunction(signature(xbe = "numeric", g="numeric"),body = src1, plugin="Rcpp")

## Single process …
Run Code Online (Sandbox Code Playgroud)

r rcpp snow

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

Base R 图形:点范围和功能区

如何在基本 R 图形中绘制点范围图和带状图?

以下是ggplot2我想在不依赖于基本 R 安装之外的情况下重现的两个图。我不需要复制任何主题元素或标签。

library(ggplot2)
library(marginaleffects)

# point range
mod <- lm(mpg ~ hp + factor(cyl), mtcars)
dat <- data.frame(names(coef(mod)), coef(mod), confint(mod)) |>
    setNames(c("x", "y", "ymin", "ymax"))
ggplot(dat, aes(x = x, y = y, ymin = ymin, ymax = ymax)) +
    geom_pointrange()
Run Code Online (Sandbox Code Playgroud)

图像1

# ribbon
mod <- lm(mpg ~ hp, mtcars)
pre <- predictions(mod)
ggplot(pre, aes(x = hp, y = estimate, ymin = conf.low, ymax = conf.high)) +
    geom_ribbon(alpha = .3)
Run Code Online (Sandbox Code Playgroud)

图像2

plot r

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

quantmod:buildData(,na.rm = FALSE)删除时间序列的头部

我想从FRED系列创建一个数据集,我使用这样的quantmod包:

library(quantmod)
getSymbols(c('FEDFUNDS', 'GDPPOT', 'DGS10'), src='FRED')
dat <- buildData(FEDFUNDS ~ DGS10 + GDPPOT, na.rm=FALSE)
Run Code Online (Sandbox Code Playgroud)

我需要的是一个xts对象,其中包含对最长时间序列中所有日期的观察,以及缺少值以填充较短的时间序列.在上面的例子中,我得到:

> head(dat, 2)
           FEDFUNDS DGS10 GDPPOT
1962-10-01     2.90  3.93 3141.6
1963-01-01     2.92    NA 3173.9
> head(FEDFUNDS, 2)
           FEDFUNDS
1954-07-01     0.80
1954-08-01     1.22
> head(DGS10, 2)
           DGS10
1962-01-02  4.06
1962-01-03  4.03
> head(GDPPOT, 2)
           GDPPOT
1949-01-01 1864.8
1949-04-01 1885.2
Run Code Online (Sandbox Code Playgroud)

截断FEDFUNDS系列以匹配DGS10系列的最小日期值.我喜欢这个buildData()功能的便利,并且很乐意将它用于这个任务,但我想知道如何保持缺失的观察.

非常感谢你的时间!

编辑:我不想使用合并的原因是一些数据系列具有不同的周期性,并buildData()自动处理.

r quantmod

5
推荐指数
2
解决办法
444
查看次数

R data.table:嵌套回归结果之间的差异

我正在比较两种替代策略,以使用data.tablefor 包来估计数据子集的线性回归模型R。这两种策略产生相同的系数,所以它们看起来是等价的。这种外表是骗人的。我的问题是:

为什么lm模型中存储的数据不同?

library(data.table)

dat = data.table(mtcars)

# strategy 1
mod1 = dat[, .(models = .(lm(hp ~ mpg, data = .SD))), by = vs]

# strategy 2
mod2 = dat[, .(data = .(.SD)), by = vs][
           , models := lapply(data, function(x) lm(hp ~ mpg, x))]
Run Code Online (Sandbox Code Playgroud)

乍一看,这两种方法似乎产生了相同的结果:

# strategy 1
coef(mod1$models[[1]])
#> (Intercept)         mpg 
#>   357.97866   -10.12576

# strategy 2
coef(mod2$models[[1]])
#> (Intercept)         mpg 
#>   357.97866   -10.12576
Run Code Online (Sandbox Code Playgroud)

但是,如果我尝试从(扩展的)model.frame 中提取数据,则会得到不同的结果:

# strategy 1
expanded_frame1 = expand.model.frame(mod1$models[[1]], …
Run Code Online (Sandbox Code Playgroud)

r data.table

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

R 公式:将所有变量包装在一个转换中

我有一个公式,在左侧和右侧有任意数量的变量:

a + b * c ~ d + e
Run Code Online (Sandbox Code Playgroud)

此公式可以包含各种运算符,例如+*。我想将公式的每个变量包装在一个转换中。例如,如果我的转换被称为Factor,那么上面的公式变为:

Factor(a) + Factor(b) * Factor(c) ~ Factor(d) + Factor(e)
Run Code Online (Sandbox Code Playgroud)

请注意,它保留了相同的符号。

r

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

Perl 正则表达式:删除所有内容(包括换行符)直到找到匹配项

对于这个简单的问题表示歉意。我不经常清理文本或使用正则表达式。

我有大量文本文件,我想删除其中的每一行,直到我的正则表达式找到匹配项。在我找到匹配项之前,通常会出现大约 15 行绒毛。我希望有一个如下所示的 Perl 单行代码:

perl -p -i -e "s/.*By.unanimous.vote//g" *.txt
Run Code Online (Sandbox Code Playgroud)

但这行不通。

谢谢

regex perl

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

标签 统计

r ×8

rcpp ×2

data.table ×1

dataframe ×1

fortran ×1

matrix ×1

na ×1

numpy ×1

pandas ×1

perl ×1

plot ×1

python ×1

quantmod ×1

regex ×1

snow ×1