小编Eri*_*een的帖子

计算宽数据帧中每对坐标之间的距离

我想计算两个链接的空间坐标集(programadmin我的假数据集)之间的距离.数据采用宽格式,因此两对坐标都在同一行.

library(sp)
set.seed(1)
n <- 100
program.id <- seq(1, n)
c1 <- cbind(runif(n, -90, 90), runif(n, -180, 180))
c2 <- cbind(runif(n, -90, 90), runif(n, -180, 180))
dat <- data.frame(cbind(program.id, c1, c2))
names(dat) <- c("program.id", "program.lat", "program.long", "admin.lat", "admin.long")
head(dat)
#       program.id program.lat program.long  admin.lat  admin.long
# 1              1   -42.20844     55.70061 -41.848523   62.536404
# 2              2   -23.01770    -52.84898 -50.643849 -145.851172
# 3              3    13.11361    -82.70635   3.023431   -2.665397
# 4              4    73.47740    177.36626 -41.588893  -13.841337
# 5              5 …
Run Code Online (Sandbox Code Playgroud)

gis r distance spatial

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

dagger出现在查看器中的ggplot中,但在保存为pdf时替换为....

ggplot2用来创建一个dotplot.一件商品标签有匕首(†).当在RStudio中查看时,匕首出现在情节中,但当我将情节保存为pdf时,它将替换为.......有没有办法阻止图形设备将我的匕首转换为......?

这是一个小例子:

library(ggplot2)
# data
  dat <- data.frame(VARIABLES=c("Item 1", "Item 2 †"),
                    est=c(.3, .5),
                    min=c(.2, .4),
                    max=c(.4, .7))
# plot
  ggplot(dat, aes(x=reorder(as.character(VARIABLES), 
                            est), y=est)) +
    geom_pointrange(aes(ymin=min,
                        ymax=max),
                    linetype="dashed") +
    geom_point(size=3) +
    ylim(-1,1) +
    theme_bw() +
    theme(legend.position="none") +
    coord_flip()
#---
# dagger appears in viewer
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

# save plot
  ggsave(filename="myfig.pdf")
#---
# dagger replaced with ... in pdf
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

r ggplot2

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

将ggplot图设置为在点图行之间具有相同的x轴宽度和相同的空间

更新了问题以纳入已在SO上回答的部分解决方案

我正在使用ggplot2创建几个图并将图gridExtra组合成一个图,其中包含多个面板,所有图都在一列中.我的问题是我不能让点图行之间的空间在两个图中都是一致的.

在此输入图像描述

library(ggplot2)
# data
  dat1 <- data.frame(VARIABLES=c("Item 1", "Item 2 is a little longer"),
                     est=c(.3, .5),
                     min=c(.2, .4),
                     max=c(.4, .7))
  dat2 <- data.frame(VARIABLES=c("Item 3", 
                                 "Item 4 is even longer if you can believe it",
                                 "And there is a third item",
                                 "And a fourth item"),
                     est=c(.3, .5, .3, .5),
                     min=c(.2, .4, .2, .4),
                     max=c(.4, .7, .4, .7))
  dat <- c("dat1", "dat2")
  labs <- c("Plot 1", "Plot2")
# create plots
  count <- 1
  for (i in dat) …
Run Code Online (Sandbox Code Playgroud)

r ggplot2 gridextra

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

从一串单词中获取首字母

我拥有的:

names <- c("First Last", "First M Last", "First M. Last", "first Last", "first lAst")
Run Code Online (Sandbox Code Playgroud)

我想要的是:

"FL" "FML" "FML" "FL" "FL"
Run Code Online (Sandbox Code Playgroud)

我试过的:

paste(substr(strsplit(names, " ")[[1]], 1, 1), collapse="")
Run Code Online (Sandbox Code Playgroud)

这给出了什么:

FL
Run Code Online (Sandbox Code Playgroud)

我怎样才能为所有元素获得这个?

r

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

重新编码鼠标 mids 对象

我有一个mids从创建的对象mice。我想重新编码一些估算变量并保留mids对象。我知道我可以mids使用 将该对象转换为“long” complete(),但我想保留该mids对象,因为它有一些额外的用途。

这是使用数据集的示例nhanes。运行mice()为 中的变量创建 5 个估算数据集nhanes。我专注于hyp.

library(mice)
names(nhanes)
nhanes$hyp
#[1] NA  1  1 NA  1 NA  1  1  1 NA NA NA  1  2  1 NA  2  2 1  2 NA  1  1  1  
imp <- mice(nhanes, print = FALSE)
imp$imp$hyp
# 1 2 3 4 5
# 1  1 1 1 1 1
# 4  2 1 1 2 …
Run Code Online (Sandbox Code Playgroud)

r r-mice

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

将平均线添加到ggplot

我想建立在斜率上调节线颜色的这个例子,为平均值添加一条线(从平均值t = 1到平均值t = 2的线).

library(dplyr)
set.seed(205)
dat = data.frame(t=rep(1:2, each=10), 
                 pairs=rep(1:10,2), 
                 value=rnorm(20))

ggplot(dat %>% group_by(pairs) %>%
         mutate(slope = (value[t==2] - value[t==1])/(2-1)),
       aes(t, value, group=pairs, colour=slope > 0)) +
  geom_point() +
  geom_line()
Run Code Online (Sandbox Code Playgroud)

我试着添加stat_summary(fun.y=mean, geom="line")没有任何运气.

计算失败stat_summary():'what'必须是函数或字符串

r ggplot2

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

将此循环转换为pur声?

我正在尝试为学生运行采样提供教学示例,但是当迭代次数达到数千时(实际数据帧df有几百万行),结果太慢了。

我可以加快速度purr吗?

library(tidyverse)
set.seed(1432)
df <- data.frame(v1 = sample(1:10, 100, replace=TRUE),
                 v2 = c(rep("A", 50), rep("B", 50))
)

output <- NULL

for (i in 1:10) {
  set.seed(i)
  d <- df %>%
    filter(v2=="A") %>%
    sample_n(20, replace=FALSE)

  mean = mean(d$v1)
  output <- c(output, mean)
}

output
Run Code Online (Sandbox Code Playgroud)

r purrr tidyverse

4
推荐指数
2
解决办法
57
查看次数

创建一个符合以下参数的假数据集:N、mean、sd、min 和 max

有没有办法创建一个符合以下参数的假数据集:N、mean、sd、min 和 max?

我想创建一个包含 187 个整数尺度分数的样本,这些分数的平均值为 67,标准差为 17,观察值在 [30, 210] 范围内。我正在尝试展示有关统计功效的概念课程,并且我想创建具有看起来像已发布结果的分布的数据。此示例中的量表分数是 30 个项目的总和,每个项目的范围从 1 到 7。我不需要构成量表分数的单个项目的数据,但这会是一个奖励。

我知道我可以使用rnorm(),但这些值不是整数,最小值和最大值可能会超过我的可能值。

scaleScore <- rnorm(187, mean = 67, sd = 17)
Run Code Online (Sandbox Code Playgroud)

我也知道我可以sample()用来获得保持在这个范围内的整数,但平均值和标准偏差不会是正确的。

scaleScore <- sample(30:210, 187, replace=TRUE)
Run Code Online (Sandbox Code Playgroud)

@Pascal 的提示让我urnorm()Runuran包裹中找到了:

set.seed(5)
scaleScore <- urnorm(n=187, mean=67, sd=17, lb=30, ub=210)
mean(scaleScore)
# [1] 68.51758
sd(scaleScore)
# [1] 16.38056
min(scaleScore)
# [1] 32.15726
max(scaleScore)
# [1] 107.6758
Run Code Online (Sandbox Code Playgroud)

当然,均值和标准差并不准确,向量也不由整数组成。

还有其他选择吗?

r mathematical-optimization

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

如何循环遍历列名向量,通过赋值将每列变异回列和函数引用循环索引

如果您可以原谅我对循环的兴趣,我想知道如何循环遍历变量名向量(在我的用例中必须是字符串)并改变原始列。i在这个玩具示例中,我想计算plus列的平均值z

df_have <- data.frame(x=c(1, 1, 2, 3, 3),
                      y=c(2, 2, 3, 4, 4),
                      z=c(0, 1, 2, 3, 4))

for (i in c("x", "y")) {
  df_test <-
    df_have %>%
    mutate(!!i := mean(i)+z)
}

df_want <- data.frame(x=c(2, 3, 4, 5, 6), # mean 2 + z
                      y=c(3, 4, 5, 6, 7), # mean 3 + z
                      z=c(0, 1, 2, 3, 4)) 
Run Code Online (Sandbox Code Playgroud)

r dplyr

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

使用pivot_wider()“传播”多个变量

pivot_wider()在开发版本中使用“传播”多个变量的最佳方法是什么tidyr

# https://tidyr.tidyverse.org/dev/reference/pivot_wider.html
# devtools::install_github("tidyverse/tidyr")
library(tidyr)
library(tidyverse)
have <- tibble::tribble(
  ~user_id, ~question, ~answer, ~timestamp,
  1, "q1", "a1", "2019-07-22 16:54:43",
  1, "q2", "a2", "2019-07-22 16:55:43",
  2, "q1", "a1", "2019-07-22 16:56:43",
  2, "q2", "a2", "2019-07-22 16:57:43",
  3, "q1", "a1", "2019-07-22 16:58:43",
  3, "q2", "a2", "2019-07-22 16:59:43"
) %>%
  mutate(timestamp = as_datetime(timestamp))

have
# # A tibble: 6 x 4
# user_id question answer timestamp          
# <dbl> <chr>    <chr>  <dttm>             
#   1       1 q1       a1     2019-07-22 16:54:43
#   2       1 …
Run Code Online (Sandbox Code Playgroud)

r tidyr

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