我想计算两个链接的空间坐标集(program和admin我的假数据集)之间的距离.数据采用宽格式,因此两对坐标都在同一行.
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) 我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)

更新了问题以纳入已在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) 我拥有的:
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)
我怎样才能为所有元素获得这个?
我有一个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) 我想建立在斜率上调节线颜色的这个例子,为平均值添加一条线(从平均值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'必须是函数或字符串
我正在尝试为学生运行采样提供教学示例,但是当迭代次数达到数千时(实际数据帧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) 有没有办法创建一个符合以下参数的假数据集: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)
当然,均值和标准差并不准确,向量也不由整数组成。
还有其他选择吗?
如果您可以原谅我对循环的兴趣,我想知道如何循环遍历变量名向量(在我的用例中必须是字符串)并改变原始列。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) 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)