r - 将一串变量粘贴到函数中不起作用
问题描述
我在看这个问题:Find how many times duplicated rows repeat in R data frame,它提供了以下代码:
library(plyr)
ddply(df,.(a,b),nrow)
但是,我有一个包含许多变量的数据集,所以在这种情况下我不能像 a,b 那样输入它们。我尝试使用带有粘贴功能的名称(数据),但它似乎不起作用。我试过这个:
var_names=paste(names(data),collapse=",")
ddply(data,.(paste(a)),nrow)
相反,它给出了这个输出:
但是,如果我手动输入它们,我会得到正确的输出:
我需要在这里做些什么不同的事情?
解决方案
代替paste
和评估,使用count
from dplyr
,它可以使用多列across
和select-helpers
-everything()
library(dplyr)
df %>%
count(across(everything()))
具有mtcars
数据集的可重现示例
data(mtcars)
df <- mtcars %>%
select(vs:carb)
count(df, across(everything()))
vs am gear carb n
1 0 0 3 2 4
2 0 0 3 3 3
3 0 0 3 4 5
4 0 1 4 4 2
5 0 1 5 2 1
6 0 1 5 4 1
7 0 1 5 6 1
8 0 1 5 8 1
9 1 0 3 1 3
10 1 0 4 2 2
11 1 0 4 4 2
12 1 1 4 1 4
13 1 1 4 2 2
14 1 1 5 2 1
此外,在 中ddply
,我们可以只传递一个列名向量,即无需创建单个字符串
library(plyr)
ddply(df, names(df), nrow)
vs am gear carb V1
1 0 0 3 2 4
2 0 0 3 3 3
3 0 0 3 4 5
4 0 1 4 4 2
5 0 1 5 2 1
6 0 1 5 4 1
7 0 1 5 6 1
8 0 1 5 8 1
9 1 0 3 1 3
10 1 0 4 2 2
11 1 0 4 4 2
12 1 1 4 1 4
13 1 1 4 2 2
14 1 1 5 2 1
或者,如果我们从名称创建单个字符串,还有paste
整个表达式,然后eval
是 uate(不建议这样做,因为有标准的处理方法)
eval(parse(text = paste('ddply(df, .(', toString(names(df)), '), nrow)')))
vs am gear carb V1
1 0 0 3 2 4
2 0 0 3 3 3
3 0 0 3 4 5
4 0 1 4 4 2
5 0 1 5 2 1
6 0 1 5 4 1
7 0 1 5 6 1
8 0 1 5 8 1
9 1 0 3 1 3
10 1 0 4 2 2
11 1 0 4 4 2
12 1 1 4 1 4
13 1 1 4 2 2
14 1 1 5 2 1
推荐阅读
- c - GStreamer 1.0 在 C 中将原始编码为 H.264
- javascript - 如何从 Javascript 中获取 cookie?
- python - 将文本文件中的值分配给可用于 python 下一步的变量
- java - @exceptionhandler 在 Spring REST 中不起作用
- javascript - 更改拖放时可拖动的颜色和悬停时可拖放区域内的颜色
- html - 在 CSS 中动态获取导航栏的高度
- angular - Gitlab-ci:如何实现 dayli 自动化测试和手动部署
- javascript - 尝试要求未安装但不必要的模块时发出警告
- c++ - 使用队列制作可变大小、延迟的帧缓冲区时出现意外行为
- java - 如何在 HashSet 中保留插入顺序?