小编use*_*193的帖子

数据集的不规则列表列表

有问题.我需要将一个不规则的列表列表转换为宽格式的data.frame(即我需要相同数量的行),我只是无法弄清楚如何做到这一点.列表看起来像这样:

[[1]]
[1] 14

[[2]]
[1] 26

[[3]]
[1] 20 21 22 23

[[4]]
[1] 21 22

[[5]]
[1] 25

[[6]]
[1] 17 21 23
Run Code Online (Sandbox Code Playgroud)

我尝试过使用for循环和/或sapply的各种方法,但没有任何作用.不同长度的列表元素排除了我所做的任何尝试.在我看来,必须有一种相当直接的方法来做到这一点.一定不是吗?任何人都可以建议吗?

r list dataframe

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

如何使用模式生成空间点

我正在做一些工作,我需要生成a)随机空间点b)非随机空间点,在多边形上,即b)点概率取决于例如东西渐变,或距某些点源的距离或者是其他东西

对于a)我可以使用包中的spsample()命令在多边形上生成随机点sp,如下所示:

# Load a spatial polygon from maptools package
library(maptools)
nc <- readShapePoly(system.file("shapes/sids.shp", package="maptools")[1],        proj4string=CRS("+proj=longlat +datum=NAD27"))
plot(nc)

library(sp)
pts <- spsample(nc, 100, type="random")
plot(nc)
points(pts, pch=19, col="red")
Run Code Online (Sandbox Code Playgroud)

这给出了我想要的a).但是,这可以修改为b)所以东部比西部更有可能吗?(虽然仍然可以指定我想要100分?)

random r spatial points spatstat

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

使用ggplot2以粗体对齐各个轴标签

问题和解决方案改编的问题:使用ggplot2以粗体突出显示各个轴标签

我想根据满足标准选择性地证明水平轴标签的合理性.所以从上面的问题和答案中借鉴我已经建立了一个例子:

require(ggplot2)
require(dplyr)
set.seed(36)
xx<-data.frame(YEAR=rep(c("X", "Y"), each=20),
           CLONE=rep(c("A", "B", "C", "D", "E"), each=4, 2),
           TREAT=rep(c("T1", "T2", "T3", "C"), 10),
           VALUE=sample(c(1:10), 40, replace=T))

# Simple plot with factors on y axis
ggplot(xx, aes(x = VALUE, y=CLONE, fill=YEAR)) + 
    geom_bar(stat="identity", position="dodge") +
    facet_wrap(~TREAT)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

好的,所以我从上面的问题+答案中采用了函数来生成一个理由的向量:

# Modify to control justification
colorado2 <- function(src, boulder) {
    if (!is.factor(src)) src <- factor(src)                   
    src_levels <- levels(src)                                 
    brave <- boulder %in% src_levels                         
    if (all(brave)) {                                         
        b_pos <- purrr::map_int(boulder, ~which(.==src_levels)) 
        b_vec <- rep(0.2, length(src_levels))               
        b_vec[b_pos] <- …
Run Code Online (Sandbox Code Playgroud)

r axes labels ggplot2

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

用NA替换整数(0)

我有一个函数,我应用于一个列,并将结果放在另一列,它有时给我integer(0)输出.所以我的输出列将是这样的:

45
64
integer(0)
78
Run Code Online (Sandbox Code Playgroud)

我如何检测这些integer(0)并替换它们NA?有类似的东西is.na()可以检测到它们吗?


编辑:好的我想我有一个可重复的例子:

df1 <-data.frame(c("267119002","257051033",NA,"267098003","267099020","267047006"))
names(df1)[1]<-"ID"

df2 <-data.frame(c("257051033","267098003","267119002","267047006","267099020"))
names(df2)[1]<-"ID"
df2$vals <-c(11,22,33,44,55)

fetcher <-function(x){
  y <- df2$vals[which(match(df2$ID,x)==TRUE)]
return(y) 
}

sapply(df1$ID,function(x) fetcher(x))
Run Code Online (Sandbox Code Playgroud)

此输出sapply是问题的根源.

> str(sapply(df1$ID,function(x) fetcher(x)))
List of 6
$ : num 33
$ : num 11
$ : num(0) 
$ : num 22
$ : num 55
$ : num 44
Run Code Online (Sandbox Code Playgroud)

我不希望这是一个列表 - 我想要一个矢量,而不是num(0)我想要的NA(注意它给出的玩具数据num(0)- 在我给出的真实数据中(integer(0)).

integer r transformation

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

numpy数组重塑添加维度

好的我是(非常)新手Python用户,但我试图将一段Python代码翻译成R,我遇到了一个令人困惑的问题,即数组重塑.

让我们做一些示例数据:

X1 = np.array([[-0.047, -0.113, 0.155, 0.001],
        [0.039, 0.254, 0.054, 0.201]], dtype=float)

In:X1
Out:
array([[-0.047, -0.113, 0.155, 0.001],
        [0.039, 0.254, 0.054, 0.201]])
In:X1.shape
Out: (2,4)
Run Code Online (Sandbox Code Playgroud)

好的,我已经制作了一个包含2行和4列的2D数组.我很高兴.这行代码产生了混乱:

X2 = X1.reshape((2, -1, 1))

In: X2
Out:
array([[[-0.047],
        [-0.113],
         [0.155],
         [0.001]],

         [0.039],
         [0.254],
         [0.054],
         [0.201]]])

In: X2.shape
Out: (2, 4, 1)
Run Code Online (Sandbox Code Playgroud)

所以我知道我添加了一个额外的维度(我认为是1reshape命令中的第三个数字),但我不明白这是做了什么的.形状意味着它仍然有2行4列,但显然还有其他东西被改变了.我的动机再一次是在R中做同样的操作,但直到我知道我明白我在这里转变了什么我才被困住了.(请原谅我,如果这是一个非常糟糕的问题我昨天才开始使用Python!)

python arrays numpy reshape

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

沿数组的多个维度优化 which.max

我有一些带有 4 维数组的代码,我需要在多个维度上应用 which.max。它很慢,我想找到加快速度的方法。

例子:

library(microbenchmark)

array4d <- array( runif(5*500*50*5 ,-1,0),
                  dim = c(5, 500, 50, 5) )

microbenchmark(
    max_idx <- apply(array4d, c(1,2,3), which.max )
    )
Run Code Online (Sandbox Code Playgroud)

任何提示表示赞赏,谢谢!

编辑:通过直接在 for 循环中对其进行编码,我设法使其稍微快了一点(虽然丑陋) - 但我希望那里有人有更好的想法!

method1 <- function(z) {
    apply(z, c(1,2,3), which.max)
}
method2 <- function(z){
    result <- array( , dim = dim(z)[1:3] )
    for(i in 1:dim(z)[1]){
        for(j in 1:dim(z)[2]){
            for(k in 1:dim(z)[3]){
                result[i, j, k] <- which.max(z[i,j,k,])
            }
        }
    }
    return(result)
}

microbenchmark(
result1 <- method1(array4d),
result2 <- method2(array4d))

> microbenchmark(
+ …
Run Code Online (Sandbox Code Playgroud)

r multidimensional-array

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

如何在R /中执行复杂的多列匹配

我希望根据多个列上的条件匹配两个数据帧,但无法弄清楚如何.所以,如果有我的数据集:

df1 <- data.frame(lower=c(0,5,10,15,20), upper=c(4,9,14,19,24), x=c(12,45,67,89,10))
df2 <- data.frame(age=c(12, 14, 5, 2, 9, 19, 22, 18, 23))
Run Code Online (Sandbox Code Playgroud)

我希望将df2中的年龄与df1中的下限和上限之间的范围相匹配,目的是在df1中添加一个额外的列,其中包含df1中x的值,其中age位于上下之间.即我希望df2看起来像

age    x
12    67
14    67
 5    45
....etc. 
Run Code Online (Sandbox Code Playgroud)

我怎样才能实现这样的匹配?

r matching dataframe

4
推荐指数
3
解决办法
124
查看次数

使用具有聚类数据的小鼠进行插补

因此,我正在使用该mice软件包估算缺少的数据。我是归因于算术的新手,所以我已经讲了一点,但是却遇到了陡峭的学习曲线。举一个玩具的例子:

library(mice)
# Using nhanes dataset as example
df1 <- mice(nhanes, m=10)
Run Code Online (Sandbox Code Playgroud)

因此,如您所见,我使用默认设置大多数情况下估算了df1 10次-我很乐意将此结果用于回归模型,合并结果等。但是在我的实际数据中,我有来自不同国家/地区的调查数据。因此,失踪的程度因国家/地区而异,具体变量的值(即年龄,受教育程度等)的值也不同。因此,我想归纳失踪者,以便按国家进行聚类。因此,我将创建一个没有缺失的分组变量(当然,在此玩具示例中,与其他变量的相关性缺失,但是在我的真实数据中它们存在)

# Create a grouping variable
nhanes$country <- sample(c("A", "B"), size=nrow(nhanes), replace=TRUE)
Run Code Online (Sandbox Code Playgroud)

因此,如何分辨mice()此变量与其他变量不同-即它是多级数据集中的一个级?

r multi-level r-mice imputation

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

Vectorised Rcpp随机二项式绘制

这是这个问题的后续问题:在Rcpp和R中生成相同的随机变量

我正在尝试加速对这种形式的rbinom的向量化调用:

    x <- c(0.1,0.4,0.6,0.7,0.8)
    rbinom(length(x),1 ,x)
Run Code Online (Sandbox Code Playgroud)

在x的实时代码中是一个可变长度的向量(但通常以百万为单位编号).我没有Rcpp的经验,但我想知道我可以使用Rcpp来加快速度.从链接的问题来看,这个Rcpp代码被建议用于@Dirk Eddelbuettel的非矢量化rbinom调用:

    cppFunction("NumericVector cpprbinom(int n, double size, double prob) { \
         return(rbinom(n, size, prob)); }")
    set.seed(42); cpprbinom(10, 1, 0.5)
Run Code Online (Sandbox Code Playgroud)

....并且大约是非Rcpp选项的两倍,但无法处理我的矢量化版本

    cpprbinom(length(x), 1, x)
Run Code Online (Sandbox Code Playgroud)

如何修改Rcpp代码来实现这一点?

谢谢

r rcpp

3
推荐指数
2
解决办法
1218
查看次数

ggplot2 - 当多于一行时控制线型

以下面的例子为例:

library(ggplot2)
dsamp <- diamonds[sample(nrow(diamonds), 1000), ]

ggplot(dsamp, aes(x = x)) +
    geom_line(aes(y = y, linetype = "Simple Model")) +
    geom_line(aes(y = z, linetype = "Complex Model"))
Run Code Online (Sandbox Code Playgroud)

产生这个图: 在此处输入图片说明

好的。我的问题是我想要反转线型。我希望简单模型有实线,复杂模型有虚线。默认情况下,字母顺序似乎决定了这里的线型。我已经使用 scale_linetype_manual 等尝试了不同的变体,但尽我所能,我无法将简单的线条设为实线,将复杂的线条设为虚线,同时在图例中保留“简单”和“复杂”标题。在有人提出建议之前,我试图避免融化/重塑这些数据,使两个 y 变量都在 1 列中,因为实际数据在绘图等中具有更多内容,并且会非常复杂。

编辑:好的,感谢 Haboryme 的回复。我找到了我困惑的根源。

采取以下情节:

ggplot(dsamp, aes(x = x)) +
    geom_line(aes(y = y, linetype = "Simple Model"), size = 1.5) +
    geom_line(aes(y = z, linetype = "Complex Model"), size = 1.5) +
    scale_linetype_manual(values=c( 5, 1))
Run Code Online (Sandbox Code Playgroud)

图例似乎将线型都显示为实线: 在此处输入图片说明

但是,如果我将其更改为线型 3:

ggplot(dsamp, aes(x = x)) +
    geom_line(aes(y = y, …
Run Code Online (Sandbox Code Playgroud)

r ggplot2

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

R 相当于 Python 的 np.dot for 3D array

我正在将一些涉及 3D 矩阵的代码从 Python 翻译成 R。这很棘手,因为我对 Python 或矩阵代数知之甚少。总之在Python代码中,我有一个矩阵dot.product如下:np.dot(A, B)。矩阵 A 的维数为 (10, 4),矩阵 B 的维数为 (2, 4, 2)。(这些维度可能会有所不同,但始终会在第二个维度上匹配)。所以 np.dot 从文档中看没有问题:

“对于二维数组,它相当于矩阵乘法,对于一维数组,相当于向量的内积(没有复共轭)。对于 N 维,它是 a 的最后一个轴和第二个到- b的最后一个:”

因此它沿 A=4 的第二个轴和 B=4 的中轴相乘,并输出一个 (10,2,2) 矩阵。=> 没问题。但是在 R 中,%*%没有这种行为并抛出“不符合数组”的错误。

r 中的玩具示例:

A <- matrix( rnorm(10*4), nrow=10, ncol=4)
B <- array( rnorm(2*4*2), c(2,4,2))
A %*% B
Error in A %*% B : non-conformable arrays
Run Code Online (Sandbox Code Playgroud)

我怎样才能解决这个问题以实现与 相同的计算np.dot

python arrays numpy r matrix

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

Fisher测试2组以上

主要编辑:由于我的原著放置不当,我决定重写这个问题。我将在下面保留原始问题,以保持记录。基本上,我需要在4 x 5的大表上进行费舍尔测试,并进行200个观察。事实证明,这往往是作为解释的一大挑战计算这里(我想,我不能按照它完全)。当我同时使用R和Stata时,我将用一些虚构数据对问题进行框架化。

Stata:

    tabi 1 13 3 27 46 \ 25 0 2 5 3 \ 22 2 0 3 0 \ 19 34 3 8 1 , exact(10)
Run Code Online (Sandbox Code Playgroud)

您可以增加到exact()1000个最大值(但可能需要一天的时间才能返回错误)。

R:

    Job <- matrix(c(1,13,3,27,46, 25,0,2,5,3, 22,2,0,3,0, 19,34,3,8,1), 4, 5,
         dimnames = list(income = c("< 15k", "15-25k", "25-40k", ">40k"),
         satisfaction = c("VeryD", "LittleD", "ModerateS", "VeryS", "exstatic")))
    fisher.test(Job)
Run Code Online (Sandbox Code Playgroud)

至少对我来说,这两个程序都出错。那么问题是如何在Stata或R上进行此计算?

原始问题:我有Stata和R一起玩。我有一个包含各种分类变量的数据集,其中一些具有多个类别。因此,我想用超过2 x 2的类别进行Fisher的精确测试,即将Fisher应用于2 x 6的表或4 x 4的表。

可以使用R或Stata完成此操作吗?

编辑:虽然这可以在Stata中完成-但由于我的类别过多,因此不适用于我的数据集。Stata经过无休止的迭代,甚至搁置一天或更长时间也无法解决。

我的问题确实是-R可以做到吗,并且它可以很快做到吗?

statistics r stata

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