小编Cal*_*You的帖子

使用扫帚和tidyverse对不同的因变量运行回归

我正在寻找可以解决这个难题的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,他们将用于所有回归.

是我发现的最接近的

让我知道如果我需要澄清我的问题.谢谢.

loops regression r broom tidyverse

9
推荐指数
3
解决办法
566
查看次数

我怎样才能像purrr中的reduce2函数一样使用accumulate?

我想使用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)

r purrr tidyverse

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

ggplot2更改每个小平面面板的轴限制

library(tidyverse)
ggplot(mpg, aes(displ, cty)) + 
  geom_point() + 
  facet_grid(rows = vars(drv), scales = "free")
Run Code Online (Sandbox Code Playgroud)

上面的代码ggplot包括三个板4fr。我希望每个面板的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 ggplot2

5
推荐指数
3
解决办法
3417
查看次数

R 中 tidyr::complete 的 Python 等效项,允许指定附加值

我正在寻找重新创建一个 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)

python r pandas dplyr pandas-groupby

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

如何同时向两个方向旋转?

我有如下所示的示例数据,其中对于一个单位,我有多次治疗,并且每次治疗在周期前后都有多个测量值。我想做一个前后比较,所以我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)

r tidyr

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

为组合图添加一个包含所有变量的图例

我正在尝试并排绘制两个图表,并使用一个常见的图例,该图例包含两个图表之间的所有变量(图表之间的某些变量是不同的)。

这是我一直在尝试的模拟示例:

#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)

r ggplot2 ggpubr

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

通过行列索引替换数据框中的值时,如何避免循环?

我希望能够通过按行和列索引来替换数据框中的值,给定行索引,列名和值的列表.

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)

r

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

如何使用summarise_at将不同的函数应用于不同的列?

我有一个包含以下列的数据框:

> 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)

r dplyr

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

使用SF将空间坐标集转换为R中的多边形

列表中的每个元素都包含一组空间坐标,我希望使用sf将其转换为多边形。每一组坐标按我想“连接点”的顺序排序,并且第一行和最后一行相同,以关闭多边形。每个列表元素都用唯一的标识符命名,我希望将其保留为sf输出中的属性。

我已经从与SF相关的答案中改编了代码:

通过R中的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 r-sf

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

如何用ggplot2在R中绘制钻石?

我试图在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)

r ggplot2

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

标签 统计

r ×10

ggplot2 ×3

dplyr ×2

tidyverse ×2

broom ×1

ggpubr ×1

loops ×1

pandas ×1

pandas-groupby ×1

purrr ×1

python ×1

r-sf ×1

regression ×1

tidyr ×1