我正在寻找可以解决这个难题的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,他们将用于所有回归.
这是我发现的最接近的
让我知道如果我需要澄清我的问题.谢谢.
在我下面的图中,我有两个单独的data(dat和dat2)源,用于两个不同的geom_smooth()调用,生成黑色和红色回归线(见下图)。
是否可以手动添加另一个legend显示调用黑线"Between"和调用红线的方法"Within"?
library(tidyverse)
dat <- read.csv('https://raw.githubusercontent.com/rnorouzian/e/master/cw2.csv')
dat$groups <- factor(dat$groups)
dat2 <- dat %>% group_by(groups) %>% summarize(mean_x = mean(x),
mean_y = mean(y),
.groups = 'drop')
dat %>%
ggplot() +
aes(x, y, color = groups, shape = groups)+
geom_point(size = 2) + theme_classic()+
stat_ellipse(level = .6) +
geom_point(data = dat2,
mapping = aes(x = mean_x, y = mean_y,fill = factor(groups)),
size = 4, show.legend = F,shape=21) …Run Code Online (Sandbox Code Playgroud) 假设我有数据test(给定的 dput),其中 list-col 说items:
test <- structure(list(items = list('a', c('b', 'c'), c('d', 'e'), 'f', c('g', 'h')),
ID = c(1,1,1,2,2)), row.names = c(NA, 5L), class = "data.frame")
library(tidyverse)
test %>% group_by(ID) %>%
mutate(dummy = accumulate(items, ~paste(.x, .y)))
Run Code Online (Sandbox Code Playgroud)
我得到一个像这样的 list-col 输出
items ID dummy
1 a 1 a
2 b, c 1 a b, a c
3 d, e 1 a b d, a c e
4 f 2 f
5 g, h 2 f g, f h …Run Code Online (Sandbox Code Playgroud) 我想在我的数据框中使用函数relevel()和reorder() 。我了解重新调整级别的工作原理,但我不明白为什么我在 data.frame 中看不到级别的变化。例如,假设我有鸢尾花数据集。
library(tidyverse)
head(iris)
#> Sepal.Length Sepal.Width Petal.Length Petal.Width Species
#> 1 5.1 3.5 1.4 0.2 setosa
#> 2 4.9 3.0 1.4 0.2 setosa
#> 3 4.7 3.2 1.3 0.2 setosa
#> 4 4.6 3.1 1.5 0.2 setosa
#> 5 5.0 3.6 1.4 0.2 setosa
#> 6 5.4 3.9 1.7 0.4 setosa
iris$Species <- factor(iris$Species, levels = c("versicolor","setosa","virginica"),
labels = c("versicolor","setosa","virginica"))
Run Code Online (Sandbox Code Playgroud)
由reprex 包于 2022 年 4 月 12 日创建(v2.0.1)
我可以使用此函数来更改级别的顺序或 dplyr 中的此函数:
iris …Run Code Online (Sandbox Code Playgroud) 在我的数据框中,我有多列包含学生成绩。我想对“测验”列进行求和(例如测验1、测验2)。但是,我只想对前 2 个值求和,而忽略其他值。我想创建一个包含总计(即前 2 个值的总和)的新列。
\n一个问题是,有些学生的成绩与给定行中的前 2 名成绩并列。例如,Aaron 的得分很高,为 42,但随后有两个得分并列第二高(即 36)。
\n数据
\ndf <- \n structure(\n list(\n Student = c("Aaron", "James", "Charlotte", "Katie", "Olivia", \n "Timothy", "Grant", "Chloe", "Judy", "Justin"),\n ID = c(30016, 87311, 61755, 55323, 94839, 38209, 34096, \n 98432, 19487, 94029),\n Quiz1 = c(31, 25, 41, 10, 35, 19, 27, 42, 15, 20),\n Quiz2 = c(42, 33, 34, 22, 23, 38, 48, 49, 23, 30),\n Quiz3 = c(36, 36, 34, 32, 43, 38, 44, 42, …Run Code Online (Sandbox Code Playgroud) 老实说,我不知道如何使其可重现。使用 tidyverse 在 R 中发生的任何错误都会抛出:
Error in app$vspace(new_style$`margin-top` %||% 0) :
attempt to apply non-function
Run Code Online (Sandbox Code Playgroud)
还有其他人看过这个吗?
编辑:这是 sessionInfo() 输出:
R version 4.0.4 (2021-02-15)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 10 x64 (build 18363)
Matrix products: default
locale:
[1] LC_COLLATE=English_United Kingdom.1252 LC_CTYPE=English_United Kingdom.1252 LC_MONETARY=English_United Kingdom.1252 LC_NUMERIC=C
[5] LC_TIME=English_United Kingdom.1252
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] rstatix_0.7.0 plotly_4.10.0 ggpubr_0.4.0 forcats_0.5.1 stringr_1.4.0 dplyr_1.0.4 purrr_0.3.4 readr_2.1.2 tidyr_1.2.0 tibble_3.0.6
[11] ggplot2_3.3.5 tidyverse_1.3.1
loaded via a namespace …Run Code Online (Sandbox Code Playgroud) 这是我的数据框:
df:
Country Total lon lat
United Kingdom 5000 -3.43597 55.37805
China 4000 104.1954 35.86166
France 4000 2.213749 46.22764
Australia 4500 133.7751 -25.2744
Mexico 0 -102.553 23.6345
Run Code Online (Sandbox Code Playgroud)
我是 R 新手。我正在尝试制作一张地图,显示从许多不同国家到墨西哥的旅行。目的地是墨西哥,因此所有数据流都将朝一个方向流动。我不知道如何建立国家之间的联系。我使用以下代码来制作布局:
world <- ne_countries(scale = "medium", returnclass = "sf")
class(world)
new_df <- read.csv('df.csv')
ggrepel::geom_label_repel
ggplot(data = world) +
geom_sf()+geom_point(data=new_df, aes(x=lon, y=lat), colour='red')+
ggrepel::geom_label_repel(data = new_df,
aes(x = lon, y = lat),
label = new_df$Country,
size = 2,
col = "blue")
Run Code Online (Sandbox Code Playgroud) 管道和tidyverse有时非常方便.用户想要将一列从一种类型转换为另一种类型.
像这样:
mtcars$qsec <-as.integer(mtcars$qsec)
Run Code Online (Sandbox Code Playgroud)
这需要输入我需要的两倍.请不要建议使用"with"命令,因为我觉得它使用起来很混乱.
什么是tidyverse和magrittr%<>%的方式以最少的打字量做同样的事情?另外,如果qsec是第6列,我该怎么做才引用列位置.像(不正确的代码)
mtcars %<>% mutate(as.integer,qsec)
mtcars %<>% mutate(as.integer,[[6]])
Run Code Online (Sandbox Code Playgroud) 使用示例数据(底部),我想使用下面的代码对数据进行分组和汇总。在此之后,我想转置,但我被困在如何使用 tidyr 来实现这一点?
对于上下文,我试图重新创建一个使用 knitr::kable 在 Excel 中创建的现有表,因此我的以下代码的最终产品预计会破坏整洁原则。
例如:
library(tidyverse)
Df <- Df %>% group_by(Code1, Code2, Level) %>%
summarise_all(funs(count = sum(!is.na(.))))
Run Code Online (Sandbox Code Playgroud)
我可以使用管道添加 t(.) ...
Df <- Df %>% group_by(Code1, Code2, Level) %>%
summarise_all(funs(count = sum(!is.na(.)))) %>%
t(.)
Run Code Online (Sandbox Code Playgroud)
或者我可以添加...
Df <- as.data.frame(t(Df)
Run Code Online (Sandbox Code Playgroud)
这两个选项都允许我转置,但我想知道是否有使用 tidyrgather和spread函数实现这一目标的 tidyverse 方法?我想对这个过程有更多的控制,还想删除“V1”、“V2”等,它们在使用转置 ( t)时显示为列名。
如何使用 tidyverse 实现这一目标?
示例代码:
Code1 <- c("H200","H350","H250","T400","T240","T600")
Code2 <- c("4A","4A","4A","2B","2B","2B")
Level <- c(1,2,3,1,2,3)
Q1 <- c(30,40,40,50,60,80)
Q2 <- c(50,30,50,40,80,30)
Q3 <- c(30,45,70,42,81,34)
Df <- data.frame(Code1, Code2, Level, Q1, …Run Code Online (Sandbox Code Playgroud) 我有一个名为长名单的工作,我试图保持符合特定名称/删除元素,一个tidyverse范围内,类似
dplyr::select(contains("pattern"))
Run Code Online (Sandbox Code Playgroud)
但是,我在解决问题上遇到了问题。
library(tidyverse)
a_list <-
list(a = "asdfg",
b = "qwerty",
c = "zxcvb")
a_list %>% pluck("a") # works
a_list %>% pluck(contains("a")) #does not work
a_list[2:3] # this is what I want
a_list %>% pluck(-"a") # but this does not work
Run Code Online (Sandbox Code Playgroud)