标签: tidyverse

“R for Data Science”一书(Wickham)。无法重现示例

我正在关注 H. Wickham 的R for Data Science ,但无法使那本书中的代码片段起作用。我参考了部分和本书的以下图表。 阴谋 .

我从字面上复制并粘贴了书中的部分代码,但它没有按预期工作。

library(tidyverse)
library(forcats)

by_age <-  gss_cat %>%
  filter(!is.na(age)) %>%
  group_by(age, marital) %>%
  count() %>%
  mutate(prop = n / sum(n))

ggplot(by_age, aes(age, prop, color = marital)) +
  geom_line(na.rm = TRUE)
Run Code Online (Sandbox Code Playgroud)

即使我ungroup() %>%mutate()它绘制一些东西之前使用,而不是书中的内容(略有不同的模式)。

如果有人能解释这个悖论,我将不胜感激。

主要问题是prop在我的情况下都等于 1。结果,我在图上只得到一条水平线。

谢谢!

tidyverse 版本:1.1.1 R 版本 3.4.1 (2017-06-30) 平台:x86_64-w64-mingw32/x64 (64-bit) 运行环境:Windows 7 x64 (build 7601) Service Pack 1

r tidyverse

0
推荐指数
1
解决办法
175
查看次数

Tidyverse 分组和循环数据帧的解决方案以执行 dunn.test

我在下面有一个示例数据框。

example.df <- data.frame( 
species = sample(c("primate", "non-primate"), 50, replace = TRUE),
treated = sample(c("Yes", "No"), 50, replace = TRUE), 
gender = sample(c("male", "female"), 50, replace = TRUE), 
var1 = rnorm(50, 100, 5), resp=rnorm(50, 10,5), value1 = rnorm (50, 25, 5))
Run Code Online (Sandbox Code Playgroud)

我想首先分组treated,然后循环遍历数据中的所有数字变量以使用作为解释变量的 dunn 测试(pairw.kw来自asbio包)species,提取summary数据框对象并将列yesno子列表中的列绑定到一个新的数据框对象。

我已经在这里这里使用部分“整洁”的方法获得了部分解决方案,该方法效果很好。我只是在寻找更优雅的 tidyverse 解决方案,以帮助我学习成为更好的 R 用户。

任何帮助表示赞赏。

编辑:这是我从部分“整洁”解决方案中的代码中获得的输出。

structure(list(var1.Diff = structure(1:2, .Label = c("-7.05229", 
"-2.25"), class = …
Run Code Online (Sandbox Code Playgroud)

r asbio dunn.test tidyverse

0
推荐指数
1
解决办法
258
查看次数

使用变量中的值作为参数的Filter()

我希望能够filter(),其中参数值是已经定义的变量。

因此,例如,使用可重现的mtcars数据集:

library(tidyverse)
df <- mtcars
head(df)
#>                    mpg cyl disp  hp drat    wt  qsec vs am gear carb
#> Mazda RX4         21.0   6  160 110 3.90 2.620 16.46  0  1    4    4
#> Mazda RX4 Wag     21.0   6  160 110 3.90 2.875 17.02  0  1    4    4
#> Datsun 710        22.8   4  108  93 3.85 2.320 18.61  1  1    4    1
#> Hornet 4 Drive    21.4   6  258 110 3.08 3.215 19.44  1  0    3 …
Run Code Online (Sandbox Code Playgroud)

r dplyr tidyverse

0
推荐指数
1
解决办法
64
查看次数

使用 R + ggplot 在线条图中绘制点

通常我会在 Excel 中创建这样的图:

在此处输入图片说明

我正在探索将它移动到 ggplot,但是在我没有看到可以使用的几何图形中,关于如何使用 R 和 ggplot 复制它的任何想法?

r ggplot2 tidyverse

0
推荐指数
1
解决办法
41
查看次数

旋转 data.frame,每列有多个“列”

考虑以下:

tribble(
  ~"1", ~"2", ~"3", ~"4",
  "bob", "sally", "fred","jim",
  "2011", "2012", "2013", "2014"
)
Run Code Online (Sandbox Code Playgroud)

在上面,列“1”存储我们真正想要分隔列的值,例如:

tribble(
  ~col, ~name, ~year,
  "1", "bob", "2011",
  "2", "sally", "2012",
  "3", "fred", "2013",
  "4", "jim", "2014"
)
Run Code Online (Sandbox Code Playgroud)

起初,我尝试过,pivot_longer(everything())但这会产生重复的行。

  name  value
  <chr> <chr>
1 1     bob  
2 2     sally
3 3     fred 
4 4     jim  
5 1     2011 
6 2     2012 
7 3     2013 
8 4     2014
Run Code Online (Sandbox Code Playgroud)

我考虑过尝试pivot_wider,但我无法部分选择上面值列中的年份或名称。

有任何想法吗?这当然是一个玩具示例 - 基本思想是采用多行并将它们转换为列而无需重复代码。

pivot r tidyverse

0
推荐指数
1
解决办法
73
查看次数

在 R 中动态创建数据帧和变量名称,类似于 SAS 和 STATA 中的宏

一年多以来,我一直在尝试为此找到解决方案,并决定写一篇关于它的文章。任何帮助,将不胜感激。这是我可以在 Stata 和 SAS 中轻松完成的伪代码,但我不知道如何在 R 中完成。{} 是今年引入 dplyr 的类似胶水的运算符,因此我将其用作占位符对于使伪代码工作的运算符。

library(tidyverse)
var <- "mpg"
df_name <- "mtcars"

{df_name} %>% count({var})

{df_name}_1 <- {df_name} %>% mutate(., {var}_1={var}/2)

length({df_name}_1)
Run Code Online (Sandbox Code Playgroud)

应该导致

library(tidyverse)
var <- "mpg"
df_name <- "mtcars"

mtcars %>% count(mpg)

mtcars_1 <- mtcars %>% mutate(., mpg_1=mpg/2)

length(mtcars_1)
Run Code Online (Sandbox Code Playgroud)

在 Stata 中,我可以轻松地使用本地或全局宏,如下所示:

local df_name "mtcars"
Run Code Online (Sandbox Code Playgroud)

然后将其引用为“df_name”

在 SAS 中,我可以使用这样的全局宏来做到这一点:

 %LET df_name=mtcars;
Run Code Online (Sandbox Code Playgroud)

然后像&df_name一样引用它

请注意引用这些值在视觉上是多么容易——没有赋值、获取、括号、mget 等。

这两种方法都允许在数据集名称、函数、变量等中使用它们。极大地简化了我的代码并为我节省了大量时间。如何在 R 中以视觉简单的方式做到这一点?我的代码对于熟悉 Stata/SAS 的人来说应该是可读的(dplyr 在这方面很棒!)而且太多的 eval,将所有东西都包装在函数中,用括号赋值只会让他们放弃项目或迫使我改回SAS/Stata。

我尝试了 {{}}、!!、enquo、sym 和 NSE 的所有组合,但仍然不知道如何以视觉上简单的方式使其工作。在 dplyr 管道中,变量名称终于有了一些解决方法,但对于数据帧和基础 R 没有任何解决方法。 …

r dataframe dplyr nse tidyverse

0
推荐指数
1
解决办法
360
查看次数

重组数据框(pivot_wider)

我的 data.frame 又出现了一些问题,我需要重组:

我的数据框如下所示。它描述了三个数据集 (1-3) 以及这三个数据集包含的列名:

df <- data.frame(df =   c(1, 1, 1, 1, 2, 2, 2, 3, 3, 3, 3),
                 vars = c("var1", "var2", "var3", "var4", 
                          "var1", "var1b", "var4", 
                          "var5", "var1", "var2", "var7"))

   df  vars
1   1  var1
2   1  var2
3   1  var3
4   1  var4
5   2  var1
6   2 var1b
7   2  var4
8   3  var5
9   3  var1
10  3  var2
11  3  var7


Run Code Online (Sandbox Code Playgroud)

我的目标是有一个总表所示(该值是不完全从上面的那些),其中1只表示该变量包括在内,2个可变装置不包括在相应的数据帧df1df3

df %>% pivot_wider(names_from = df, values_from …
Run Code Online (Sandbox Code Playgroud)

r tidyverse

0
推荐指数
1
解决办法
31
查看次数

使用 r 中的规范对长数据进行切片

如果我有看起来像这样的数据

id<-c(1,1,1,1,2,2,2,3,3,3,3,4,4,4,5,5,5,5,5)
age<-c(12,14,15,16,12,13,14,14,16,17,19,12,13,14,15,16,18,20,21)
grade<-c('B','C','C','A','D','B','B','A','B','A','A','D','F','B','F','F','B','B','C')
data<-data.frame(id,age,grade)
Run Code Online (Sandbox Code Playgroud)

假设 ID 是每个学生 (1:5) 在不同时间测量他们的成绩,我想看看他们在获得第一个 B 后在什么年龄发生了随后的成绩变化。 对于 12 岁获得 B 的学生 1,他/她在 14 岁时获得了 C,这是直接的。然而,对于学生 5,他/她在 18 岁时第一次获得了 B,然后在 20 岁时再次获得了 B,所以一年级的变化发生在 21 岁,也就是 C。

我认为切片将是最好的选择。

data %>% group_by(id,grade) %>% slice(which.min(age))

但我不确定如何包括接下来的几行来捕捉 B 变成另一个等级的“年龄”(又不是 B)。

r slice tidyverse

0
推荐指数
1
解决办法
89
查看次数

在 R 中将四列特殊连接成新的两列

我在R工作,我有一个有趣的问题。我想转换下一个数据帧:

DF = data.frame(ID = c(1, 2, 3),
              Person1 = c("Devin Davey", "Rui Butt", "Keon Dotson"),
              Sign = "artist",
              Person2 = c("Eli Greer", "Alvin Simons", "Leona Ford"),
              Sex = c("female", "male", "female"),
              Score = c(10, 20, 30)) 



  ID     Person1   Sign      Person2    Sex Score
1  1 Devin Davey artist    Eli Greer female    10
2  2    Rui Butt artist Alvin Simons   male    20
3  3 Keon Dotson artist   Leona Ford female    30
Run Code Online (Sandbox Code Playgroud)

像这样格式化:

  ID         Name   Sign Score
1  1  Devin …
Run Code Online (Sandbox Code Playgroud)

r data-manipulation dplyr tidyr tidyverse

0
推荐指数
2
解决办法
58
查看次数

总结一下,nrow 不返回任何内容

为什么下面将输出返回为data frame with 0 columns and 1 row,我也不知道这意味着什么。

运行的代码是

iris %>% summarise(across(everything(),nrow)) 
Run Code Online (Sandbox Code Playgroud)

请注意,以下两个都按预期返回输出

iris %>% summarise(across(everything(),length))
iris %>% summarise(across(everything(),mean))
Run Code Online (Sandbox Code Playgroud)

收到的理想输出

Sepal.Length Sepal.Width Petal.Length Petal.Width Species
     150         150          150         150     150
Run Code Online (Sandbox Code Playgroud)

r dplyr tidyverse

0
推荐指数
1
解决办法
52
查看次数

标签 统计

r ×10

tidyverse ×10

dplyr ×4

asbio ×1

data-manipulation ×1

dataframe ×1

dunn.test ×1

ggplot2 ×1

nse ×1

pivot ×1

slice ×1

tidyr ×1