如何解决将一串变量粘贴到函数中不起作用
我正在看这个问题: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
中的 dplyr
,它可以采用带有 across
和 select-helpers
- {{1} 的多列}
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
uate(不推荐这样做,因为有标准方法可以处理此问题)
eval
,
您可以通过对所有列进行分组并计算其长度来使用 aggregate
。
aggregate(1:nrow(df)~.,df,length)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。