相关疑难解决方法(0)

R:dplyr - 按位置而不是名称重命名列名

我想知道是否有一种方法可以按列的位置重命名列名,而不是按列名更改.

下面的代码段显示了如何按名称更改.

suppressPackageStartupMessages(library(dplyr))

gd_url  <- "http://tiny.cc/gapminder"
gtbl  <- gd_url %>%
  read.delim %>%
  tbl_df

gtbl  <- gtbl %>% rename(life_exp = lifeExp, 
                         gdp_percap = gdpPercap)
gtbl
Run Code Online (Sandbox Code Playgroud)

r dplyr

16
推荐指数
2
解决办法
6351
查看次数

在 R 中使用波浪号 (~) 和句号 (.)

我正在使用 Hadley 的 R4DS 书使用 tidyverse 和 purrr 进行循环,并且对波浪号 ~ 符号和句点符号的确切用法感到有些困惑。

因此,在编写 for 循环或使用 map() 时,您可以使用波浪号代替 ~,而不是写出 function()。

这仅适用于 for 循环吗?

所以如下...

models <- mtcars %>% 
  split(.$cyl) %>% 
  map(~lm(mpg ~ wt, data = .))
Run Code Online (Sandbox Code Playgroud)

此外,我被告知的句点可用于“引用当前列表元素”。但我很困惑这意味着什么。这是否意味着,只有在循环时,句点才表示它指的是正在循环的列表中的元素?它与管道有什么不同?当您使用管道时,您将一行的结果通过管道传输到下一行代码。

所以在上面的例子中, mtcars 是用 split() 管道传输到第二行的,但使用了一个句点。为什么?

下面的案例总结了我的困惑:

x <- c(1:10)

detect(x, ~.x > 5)
Run Code Online (Sandbox Code Playgroud)

使用检测功能,找到第一个匹配,我想我可以使用

detect(x, x >5)
Run Code Online (Sandbox Code Playgroud)

但我收到一条错误消息,说 x >5 不是函数。所以我加了一个波浪号

detect(x, ~ x > 5)
Run Code Online (Sandbox Code Playgroud)

并得到一个错误说它期望一个 TRUE 或 FALSE,而不是 10。所以如果你添加一个句点

detect(x, ~.x >5) 
Run Code Online (Sandbox Code Playgroud)

突然它可以作为循环使用。那么 ~ 和 . 这里又如何。与简单的管道相比?

for-loop r r-formula

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

使用管道更改特定列名

我想使用 dplyr 的管道更改数据框的几个特定列名。下面是一个这样的例子——

library(dplyr)
head(mtcars)
Run Code Online (Sandbox Code Playgroud)

现在假设,我想分别将第 2 列和第 3 列名称更改为"a""b"。简单地说,我可以这样做

colnames(mtcars)[2] <- "a"
colnames(mtcars)[3] <- "b"
Run Code Online (Sandbox Code Playgroud)

但是我想pipe在一行中使用和 来提高可读性。

任何建议我该怎么做?

非常感谢您的时间。

r dplyr

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

标签 统计

r ×3

dplyr ×2

for-loop ×1

r-formula ×1