标签: tidyverse

按行绑定未命名向量的未命名列表的 Tidyverse 方法 - do.call(rbind,x) 等效

我经常发现一些问题,人们不知何故以命名字符向量的未命名列表结束,他们想将它们逐行绑定到data.frame. 下面是一个例子:

library(magrittr)
data <- cbind(LETTERS[1:3],1:3,4:6,7:9,c(12,15,18)) %>%
  split(1:3) %>% unname
data
#[[1]]
#[1] "A"  "1"  "4"  "7"  "12"
#
#[[2]]
#[1] "B"  "2"  "5"  "8"  "15"
#
#[[3]]
#[1] "C"  "3"  "6"  "9"  "18"
Run Code Online (Sandbox Code Playgroud)

一种典型的方法是使用do.call基础 R。

do.call(rbind, data) %>% as.data.frame
#  V1 V2 V3 V4 V5
#1  A  1  4  7 12
#2  B  2  5  8 15
#3  C  3  6  9 18
Run Code Online (Sandbox Code Playgroud)

也许一种效率较低的方法是Reduce从基础 R 开始。

Reduce(rbind,data, init …
Run Code Online (Sandbox Code Playgroud)

r dplyr data.table purrr tidyverse

34
推荐指数
6
解决办法
1116
查看次数

为什么one_of()会调用它?

为什么dplyr::one_of()叫那个?所有其他select_helpers名字对我来说都是有道理的,所以我想知道是否有一个one_of()我不理解的方面.

我的理解one_of()是它只是让你使用它们的名字的字符向量来选择变量,而不是将它们的名字放入select()调用中,但是你得到名字在向量中的所有变量,而不仅仅是其中一个.这是错的,如果它是正确的,名称one_of()来自哪里?

naming r tidyverse

26
推荐指数
3
解决办法
9740
查看次数

使用dplyr :: filter()删除NA观察值

我的数据如下:

library(tidyverse)

df <- tribble(
    ~a, ~b, ~c,
    1, 2, 3, 
    1, NA, 3, 
    NA, 2, 3
)
Run Code Online (Sandbox Code Playgroud)

我可以删除所有NA观察结果drop_na():

df %>% drop_na()
Run Code Online (Sandbox Code Playgroud)

或者删除NA单个列中的所有观察值(a例如):

df %>% drop_na(a)
Run Code Online (Sandbox Code Playgroud)

为什么我不能只使用常规!=过滤管?

df %>% filter(a != NA)
Run Code Online (Sandbox Code Playgroud)

为什么我们必须使用tidyr的特殊功能去除NA?

r dplyr tidyr tidyverse

24
推荐指数
3
解决办法
6万
查看次数

从查找表中更新向量的某些值的规范 tidyverse 方法

我经常需要根据查找表重新编码数据框列中的一些(不是全部!)值。我对我所知道的解决问题的方法并不满意。我希望能够以一种清晰、稳定和高效的方式做到这一点。在我编写自己的函数之前,我想确保我没有复制已经存在的标准。

## Toy example
data = data.frame(
  id = 1:7,
  x = c("A", "A", "B", "C", "D", "AA", ".")
)

lookup = data.frame(
  old = c("A", "D", "."),
  new = c("a", "d", "!")
)

## desired result
#   id  x
# 1  1  a
# 2  2  a
# 3  3  B
# 4  4  C
# 5  5  d
# 6  6 AA
# 7  7  !
Run Code Online (Sandbox Code Playgroud)

我可以通过加入、合并、取消选择来做到这一点,如下所示,但这并不像我想要的那么清楚- 步骤太多。

## This works, but …
Run Code Online (Sandbox Code Playgroud)

r dplyr recode data.table tidyverse

24
推荐指数
6
解决办法
827
查看次数

使用dplyr删除所有变量都为NA的行

我在看似简单的任务时遇到了一些问题:删除所有变量都NA使用dplyr的所有行.我知道可以使用基本R(删除R矩阵中的所有数据为NA删除R中数据文件的空行)来完成,但我很想知道是否有一种简单的方法可以使用dplyr .

例:

library(tidyverse)
dat <- tibble(a = c(1, 2, NA), b = c(1, NA, NA), c = c(2, NA, NA))
filter(dat, !is.na(a) | !is.na(b) | !is.na(c))
Run Code Online (Sandbox Code Playgroud)

filter上面的调用做了我想要的但是在我面临的情况下它是不可行的(因为有大量的变量).我想可以通过使用filter_并首先使用(长)逻辑语句创建一个字符串来实现它,但似乎应该有一个更简单的方法.

另一种方法是使用rowwise()do():

na <- dat %>% 
  rowwise() %>% 
  do(tibble(na = !all(is.na(.)))) %>% 
  .$na
filter(dat, na)
Run Code Online (Sandbox Code Playgroud)

但这看起来并不太好,虽然它完成了工作.其他想法?

r dplyr tidyverse

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

总结的操作顺序

第一行代码中发生了什么,为什么结果与下两个结果不同?

library(tidyverse)
library(magrittr)

data.frame(A=c(2,2),B=c(1,1)) %>%
   summarise(A = sum(A),B = sum(B), D=sum(A)-sum(B))
Run Code Online (Sandbox Code Playgroud)

产量D = 0

data.frame(A=c(2,2),B=c(1,1)) %>%
   summarise(A = sum(A),B = sum(B), D=sum(A-B) )
Run Code Online (Sandbox Code Playgroud)

收率D = 2

data.frame(A=c(2,2),B=c(1,1)) %>% 
  summarise(sum_A = sum(A),sum_B = sum(B), D=sum(A)-sum(B))
Run Code Online (Sandbox Code Playgroud)

收率D = 2.

我似乎无法想出D = 0如何成为这种操作的结果.怎么可能D=0是一个明智的结果?

r magrittr tidyverse

23
推荐指数
1
解决办法
477
查看次数

将所有列转换为data.frame中的字符

考虑具有混合数据类型的data.frame.

出于奇怪的目的,用户需要将所有列转换为字符.怎么做得最好?解决问题的整合尝试是这样的:

map(mtcars,as.character) %>% map_df(as.list) %>% View()
c2<-map(mtcars,as.character) %>% map_df(as.list)
Run Code Online (Sandbox Code Playgroud)

当我打电话时str(c2),应该说一个包含所有字符的tibble或data.frame.

另一种选择是对一些参数设置write.csv()write_csv()实现生成的文件输出同样的事情.

r dataframe tidyverse

22
推荐指数
2
解决办法
2万
查看次数

How to obtain a position of last non-zero element

I've got a binary variable representing if event happened or not:

event <- c(0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0)
Run Code Online (Sandbox Code Playgroud)

I need to obtain a variable that would indicate the time when the last event happened. The expected output would be:

last_event <- c(0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 13, 13, 13, 13)
Run Code Online (Sandbox Code Playgroud)

How can I obtain that with base R, tidyverse or any other …

r base tidyverse

19
推荐指数
2
解决办法
898
查看次数

在ggplot2中复制(和修改)离散轴

我想将ggplot2图上的左侧Y轴复制到右侧,然后更改离散(分类)轴的刻度标签.

我已经阅读了这个问题的答案,但是在包的repo页面上可以看到,该switch_axis_position()函数已从cowplot包中删除(作者在ggplot2中引用(即将推出?)本机功能).

我在ggplot2中看到了辅助轴上的参考页面,但是该文档中的所有示例都使用scale_y_continuous而不是scale_y_discrete.事实上,当我尝试使用离散函数时,我得到错误:

Error in discrete_scale(c("y", "ymin", "ymax", "yend"), "position_d",  : 
unused argument (sec.axis = <environment>)
Run Code Online (Sandbox Code Playgroud)

无论如何用ggplot2做到这一点?即使是完全被黑客入侵的解决方案也足够我.提前致谢.(以下MRE)

library(ggplot2)

# Working continuous plot with 2 axes
ggplot(mtcars, aes(cyl, mpg))  + 
    geom_point() + 
    scale_y_continuous(sec.axis = sec_axis(~.+10))


# Working discrete plot with 1 axis
ggplot(mtcars, aes(cyl, as.factor(mpg)))  + 
    geom_point() 


# Broken discrete plot with 2 axes
ggplot(mtcars, aes(cyl, as.factor(mpg)))  + 
    geom_point() +
    scale_y_discrete(sec.axis = sec_axis(~.+10))
Run Code Online (Sandbox Code Playgroud)

r ggplot2 tidyverse

17
推荐指数
1
解决办法
3082
查看次数

R包“食谱”中的prep/bake/juice有什么区别?

我读了介绍tidymodels,我感到困惑的是什么prep(), bake(),并juice()从食谱包做数据。各自做什么?老实说,我发现为函数命名这样的名称令人困惑,对于烹饪类比中的每个函数,有什么更直观的名称?

r tidyverse r-recipes tidymodels

17
推荐指数
1
解决办法
1771
查看次数

标签 统计

r ×10

tidyverse ×10

dplyr ×4

data.table ×2

base ×1

dataframe ×1

ggplot2 ×1

magrittr ×1

naming ×1

purrr ×1

r-recipes ×1

recode ×1

tidymodels ×1

tidyr ×1