我经常发现一些问题,人们不知何故以未命名字符向量的未命名列表结束,他们想将它们逐行绑定到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) 为什么dplyr::one_of()叫那个?所有其他select_helpers名字对我来说都是有道理的,所以我想知道是否有一个one_of()我不理解的方面.
我的理解one_of()是它只是让你使用它们的名字的字符向量来选择变量,而不是将它们的名字放入select()调用中,但是你得到名字在向量中的所有变量,而不仅仅是其中一个.这是错的,如果它是正确的,名称one_of()来自哪里?
我的数据如下:
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?
我经常需要根据查找表重新编码数据框列中的一些(不是全部!)值。我对我所知道的解决问题的方法并不满意。我希望能够以一种清晰、稳定和高效的方式做到这一点。在我编写自己的函数之前,我想确保我没有复制已经存在的标准。
## 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) 我在看似简单的任务时遇到了一些问题:删除所有变量都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)
但这看起来并不太好,虽然它完成了工作.其他想法?
第一行代码中发生了什么,为什么结果与下两个结果不同?
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是一个明智的结果?
考虑具有混合数据类型的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()实现生成的文件输出同样的事情.
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 …
我想将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) 我读了介绍tidymodels,我感到困惑的是什么prep(), bake(),并juice()从食谱包做数据。各自做什么?老实说,我发现为函数命名这样的名称令人困惑,对于烹饪类比中的每个函数,有什么更直观的名称?