相关疑难解决方法(0)

在使用管道运算符时将dplyr重命名应用于所有列

我正在使用与下面的摘录对应的导入数据集:

set.seed(1)
dta <- data.frame("This is Column One" = runif(n = 10),
                     "Another amazing Column name" = runif(n = 10),
                     "!## This Columns is so special€€€" = runif(n = 10),
                    check.names = FALSE)
Run Code Online (Sandbox Code Playgroud)

我正在使用这些数据进行一些清理dplyr,我想将列名更改为语法正确的,并删除标点符号作为第二步.到目前为止我尝试了什么:

dta_cln <- dta %>% 
    rename(make.names(names(dta)))
Run Code Online (Sandbox Code Playgroud)

生成错误:

> dta_clean <- dta %>% 
+     rename(make.names(names(dta)))
Error: All arguments to rename must be named.
Run Code Online (Sandbox Code Playgroud)

期望的结果

我想要实现的目标可以在基础上完成:

names(dta) <- gsub("[[:punct:]]","",make.names(names(dta)))
Run Code Online (Sandbox Code Playgroud)

将返回:

> names(dta)
[1] "ThisisColumnOne"          "AnotheramazingColumnname" "XThisColumnsissospecial"
Run Code Online (Sandbox Code Playgroud)

我想达到相同的效果,但使用dyplr%>%.

syntax r dataframe dplyr

10
推荐指数
3
解决办法
9642
查看次数

以下R摘录中的期限是什么意思?

FSelector手册:

data(iris)
subset <- cfs(Species~., iris)
f <- as.simple.formula(subset, "Species")
print(f)
Run Code Online (Sandbox Code Playgroud)

具体来说,我指的是"物种〜"中的那个.

现在,对谷歌来说,如何使用一点标点符号(对我来说无论如何)都是非常困难的,我什么也做不了.此代码不清楚.

statistics r

7
推荐指数
1
解决办法
2379
查看次数

magrittr 点/句点 (".") 运算符在管道的最开始时会做什么?

我不明白.以下代码在做什么或在哪里可以找到它的文档:

library(tidyverse)

ggplot(iris) + 
  geom_point(
    aes(x=Sepal.Length, y=Sepal.Width), 
    data = . %>% filter(Species == 'setosa')
  )
Run Code Online (Sandbox Code Playgroud)

这似乎与 dplyr 句点字符“什么”中描述的用法完全不同参考?其中.没有出现在最左边的位置。

这里的文档只是说

带有点 (.) 作为 LHS 的管道将创建一个一元函数。这用于定义聚合器函数。

但这对我来说并不清楚,我希望获得更多信息。

r ggplot2 magrittr

5
推荐指数
1
解决办法
556
查看次数

在 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
查看次数

标签 统计

r ×4

dataframe ×1

dplyr ×1

for-loop ×1

ggplot2 ×1

magrittr ×1

r-formula ×1

statistics ×1

syntax ×1