我正在寻找可以解决这个难题的Tidyverse /扫帚解决方案:
假设我有不同的DV和一组特定的IVS,我想进行回归,考虑每个DV和这组特定的IV.我知道我可以使用像我这样的东西或应用家庭,但我真的想用tidyverse来运行它.
以下代码作为示例
ds <- data.frame(income = rnorm(100, mean=1000,sd=200),
happiness = rnorm(100, mean = 6, sd=1),
health = rnorm(100, mean=20, sd = 3),
sex = c(0,1),
faculty = c(0,1,2,3))
mod1 <- lm(income ~ sex + faculty, ds)
mod2 <- lm(happiness ~ sex + faculty, ds)
mod3 <- lm(health ~ sex + faculty, ds)
summary(mod1)
summary(mod2)
summary(mod3)
Run Code Online (Sandbox Code Playgroud)
收入,幸福和健康都是DV.性别和教师是IV,他们将用于所有回归.
这是我发现的最接近的
让我知道如果我需要澄清我的问题.谢谢.
我想使用accumulate具有两个输入向量和reduce2函数的函数。的文档accumulate暗示可以给出两个输入向量并且accumulate可以与 一起使用reduce2。但是,我遇到了麻烦。
这是一个示例,灵感来自 的文档reduce2。
这是来自的示例reduce2
> paste2 <- function(x, y, sep = ".") paste(x, y, sep = sep)
> letters[1:4] %>% reduce2(.y=c("-", ".", "-"), paste2)
[1] "a-b.c-d"
Run Code Online (Sandbox Code Playgroud)
accumulate这里有一些类似使用的尝试reduce2。没有一个能够正确地遍历letters[1:4]和c("-",".","-")。
> letters[1:4] %>% accumulate(.y=c("-", ".", "-"),paste2)
Error in .f(x, y, ...) : unused argument (.y = c("-", ".", "-"))
> letters[1:4] %>% accumulate(c("-", ".", "-"),paste2)
[[1]]
[1] "a"
[[2]]
NULL
> letters[1:4] …Run Code Online (Sandbox Code Playgroud) library(tidyverse)
ggplot(mpg, aes(displ, cty)) +
geom_point() +
facet_grid(rows = vars(drv), scales = "free")
Run Code Online (Sandbox Code Playgroud)

上面的代码ggplot包括三个板4,f和r。我希望每个面板的y轴限制如下:
Panel y-min y-max breaks
----- ----- ----- ------
4 5 25 5
f 0 40 10
r 10 20 2
Run Code Online (Sandbox Code Playgroud)
如何修改我的代码来完成此任务?不知道是否scale_y_continuous更有意义,或coord_cartesian,或两者的某种组合。
我正在寻找重新创建一个 R 脚本,但我一直在思考如何在 Python 中重新创建这个管道。我正在分析不同工厂的累计产量,需要对它们的累计生产时间进行归一化,以便进行比较。
管道看起来像这样:
Norm_hrs <- Cum_df%>%
group_by(Name)%>%
complete(Cum_hrs = seq(0,max(Cum_hrs),730.5))
Run Code Online (Sandbox Code Playgroud)
它需要这样:
Name Cum_Hrs A B C
Factory 1 1 0 1.887861 3.775722
Factory 1 251 0 2104.335728 21932.57871
Factory 1 611 0 2324.586178 37498.99722
Factory 1 1208 0 4361.588197 65235.05541
Factory 2 48 0 1517.840244 6604.770432
Factory 2 163 0 3370.461172 17252.70972
Factory 2 822 0 13284.87786 71918.78308
Factory 2 1541 0 21476.93602 134569.0388
Factory 2 2285 0 32053.99192 225895.1477
Factory 2 3028 0 42299.41357 340798.6151
Factory …Run Code Online (Sandbox Code Playgroud) 我有如下所示的示例数据,其中对于一个单位,我有多次治疗,并且每次治疗在周期前后都有多个测量值。我想做一个前后比较,所以我gather, 和spread如下所示以达到所需的输出。
pivot_我的问题是:这可以用一个命令来完成吗?我一直在尝试找出正确构造是否spec可以实现这一目标,但尚未成功。下面是这样的一种尝试。
我想我会接受要么一种让它发挥作用的方法,要么接受一个关于如何或在一般工作中转向的清晰解释spec,以解释为什么这是不可能的。从旋转的小插图中,我想我明白了:
.name当旋转较长时,包含输入表中的唯一列名称.value包含在旋转较长时间时您希望在输出中包含的新列名称但是,我不知道附加列的含义spec或何时需要它们。我希望我spec能理解 的"before"值period应该进入名为 的列before,但显然它不是这样工作的。
library(tidyverse) # tidyr 0.8.99.9000
tbl <- tibble(
obsv_unit = rep(1:2, each = 4),
treatment = rep(c("A", "B"), each = 2, times = 2),
period = rep(c("before", "after"), times = 4),
measure1 = 1:8,
measure2 = 11:18
)
tbl
#> # A tibble: 8 x …Run Code Online (Sandbox Code Playgroud) 我正在尝试并排绘制两个图表,并使用一个常见的图例,该图例包含两个图表之间的所有变量(图表之间的某些变量是不同的)。
这是我一直在尝试的模拟示例:
#make relative abundance values for n rows
makeData <- function(n){
n <- n
x <- runif(n, 0, 1)
y <- x / sum(x)
}
#make random matrices filled with relative abundance values
makeDF <- function(col, rw){
df <- matrix(ncol=col, nrow=rw)
for(i in 1:ncol(df)){
df[,i] <- makeData(nrow(df))
}
return(df)
}
#create df1 and assign col names
df1 <- makeDF(4, 5)
colSums(df1) #verify relative abundance values = 1
df1 <- as.data.frame(df1)
colnames(df1) <- c("taxa","s1", "s2", "s3")
df1$taxa <- c("ASV1", "ASV2", …Run Code Online (Sandbox Code Playgroud) 我希望能够通过按行和列索引来替换数据框中的值,给定行索引,列名和值的列表.
library(tidyverse)
cols <- sample(letters[1:10], 5)
vals <- sample.int(5)
rows <- sample.int(5)
df <- matrix(rep(0L, times = 50), ncol = 10) %>%
`colnames<-`(letters[1:10]) %>%
as_tibble
Run Code Online (Sandbox Code Playgroud)
我可以通过参数列表上的for循环执行此操作:
items <- list(cols, vals, rows) %>%
pmap(~ list(..3, ..1, ..2))
for (i in items){
df[i[[1]], i[[2]]] <- i[[3]]
}
df
#> # A tibble: 5 x 10
#> a b c d e f g h i j
#> <int> <int> <int> <int> <int> <int> <int> <int> <int> <int>
#> 1 0 0 0 …Run Code Online (Sandbox Code Playgroud) 我有一个包含以下列的数据框:
> colnames(my.dataframe)
[1] "id" "firstName" "lastName"
[4] "position" "jerseyNumber" "currentTeamId"
[7] "currentTeamAbbreviation" "currentRosterStatus" "height"
[10] "weight" "birthDate" "age"
[13] "birthCity" "birthCountry" "rookie"
[16] "handednessShoots" "college" "twitter"
[19] "currentInjuryDescription" "currentInjuryPlayingProbability" "teamId"
[22] "teamAbbreviation" "fg2PtAtt" "fg3PtAtt"
[25] "fg2PtMade" "fg3PtMade" "ftMade"
[28] "fg2PtPct" "fg3PtPct" "ftPct"
[31] "ast" "tov" "offReb"
[34] "foulsDrawn" "blkAgainst" "plusMinus"
[37] "minSeconds"
Run Code Online (Sandbox Code Playgroud)
这是我的代码不起作用:
my.dataframe %>%
dplyr::group_by(id) %>%
dplyr::summarise_at(vars(firstName:currentInjuryPlayingProbability), funs(min), na.rm = TRUE) %>%
dplyr::summarise_at(vars(fg2PtAtt:minSeconds), funs(sum), na.rm = TRUE) %>%
vars(), funs(min), na.rm = TRUE) %>%
dplyr::summarise(teamId = paste(teamId), teamAbbreviation …Run Code Online (Sandbox Code Playgroud) 列表中的每个元素都包含一组空间坐标,我希望使用sf将其转换为多边形。每一组坐标按我想“连接点”的顺序排序,并且第一行和最后一行相同,以关闭多边形。每个列表元素都用唯一的标识符命名,我希望将其保留为sf输出中的属性。
我已经从与SF相关的答案中改编了代码:
但是我的情况有所不同,因为我有多组坐标(每组坐标应产生一个单独的多边形),而该问题只有一组坐标(导致一个多边形)。
我的具体问题是如何使用sf来生成一个sf多边形对象,该对象在单独的行中包含多个多边形,每个多边形都是使用列表元素之一的坐标创建的。
预先感谢您的任何建议或帮助。
标记
我的示例数据是由dput()生成的,位于该问题的结尾,并且我的代码是:
points_df<-arrange(dat,SitePondGpsRep,DateTime_local) #sort on DateTime_local for proper sequence
points_df<-dplyr::select(points_df,SitePondGpsRep,Longitude,Latitude) #drop columns, for upcoming st_polygon call (requires numerics only)
points_ls<-split(points_df,points_df$SitePondGpsRep) #dataframe to list
points_ls<-lapply(points_ls, function(x) { x["SitePondGpsRep"] <- NULL; x }) #delete SitePondGpsRep column, it’s retained in list names
points_ls<-lapply(points_ls,function(x) {as.matrix(x)}) #convert to matrix for upcoming st_sf call
points_ls<-lapply(points_ls,function(x) {rbind(x,x[1,])}) #close poly, first and last point must be same
polys <- st_sf(st_sfc(st_polygon(points_ls)), crs = 4326) #create polys, but only one polygon is created when …Run Code Online (Sandbox Code Playgroud) 我试图在R中复制以下图片,特别是 ggplot2
我能够绘制红色的rss轮廓线,但我不知道如何绘制钻石(如左图所示)."预期输出"应该是一种绘制具有给定边长的钻石的方法.
编辑:这是一个简短的可重现的例子,在下面的图中随机添加钻石:
mlb<- read.table('https://umich.instructure.com/files/330381/download?download_frd=1', as.is=T, header=T)
str(mlb)
fit<-lm(Height~Weight+Age-1, data = as.data.frame(scale(mlb[,4:6])))
points = data.frame(x=c(0,fit$coefficients[1]),y=c(0,fit$coefficients[2]),z=c("(0,0)","OLS Coef"))
Y=scale(mlb$Height)
X = scale(mlb[,c(5,6)])
beta1=seq(-0.556, 1.556, length.out = 100)
beta2=seq(-0.661, 0.3386, length.out = 100)
df <- expand.grid(beta1 = beta1, beta2 = beta2)
b = as.matrix(df)
df$sse <- rep(t(Y)%*%Y,100*100) - 2*b%*%t(X)%*%Y + diag(b%*%t(X)%*%X%*%t(b))
base <- ggplot() +
stat_contour(data=df, aes(beta1, beta2, z = sse),breaks = round(quantile(df$sse, seq(0, 0.2, 0.03)), 0),
size = 0.5,color="darkorchid2",alpha=0.8) +
scale_x_continuous(limits = c(-0.4,1))+
scale_y_continuous(limits = c(-0.55,0.4))+
geom_point(data = points,aes(x,y))+
geom_text(data …Run Code Online (Sandbox Code Playgroud)