R - 在对象为“character”的情况下,使用方法“groups”没有适用的方法。

14

我正在使用 "count" 函数来汇总 dataframe 的一列。该列(dataset$Nationality)包含可能出现多次的国籍(例如瑞士、德国、法国、瑞士等)。一切都运作良好,直到今天突然出现了以下错误信息:

Error in UseMethod("groups") : no applicable method for 'groups' applied to an object of class "character".

我已重新安装dplyr,但仍然无法工作。

例如:

dataset$Nationality consists of c("Swiss", "French","German","Swiss")

那么

count(dataset$Nationality) 

会得到类似的东西

Swiss,2, French, 1, German,1

有人能告诉我我该做什么来让它再次工作吗?

非常感谢!


7
count 的代码应该是 count(dataset, Nationality) 吗? - aosmith
1
可以了!谢谢。奇怪的是之前它接受了dataset$Nationality格式。 - thixio
如果您认为我的回答有用,请点赞并接受它,这样其他人就知道这是正确的答案了。谢谢! - Ankit Gupta
4个回答

24
希望这回答了您的问题。
如果您正在使用“plyr”库library(plyr) 正确的语法是:count(dataset$Nationality) 如果您正在使用“dplyr”库library(dplyr) 正确的语法是:count(dataset, Nationality) 如果您同时使用两种库,则必须使用您最后添加的库的语法。
添加Dzej建议的内容:
我们也可以直接使用特定的库。
直接使用dplyr的语法:dplyr::count(dataset, Nationality) 直接使用plyr的语法:plyr::count(dataset$Nationality)

9
如果在 group_by(...) %>% summarise(...) 中错误地使用 count(),您将会导致本问题中所述的错误。
例如,以下代码将会产生错误:
tibble %>% 
  group_by(state) %>% 
  summarize(number_sightings = count(`duration (seconds)`))
dplyr::count(..., ..., [...])plyr::count(...)中的count()函数会生成一个"计数值",即向量中不同值的频率列表(与仅显示向量长度的单个数字相对)。在这种情况下,我希望使用n()"汇总函数"代替count()(更多信息请参见summarise文档)。
tibble %>% 
  group_by(state) %>% 
  summarize(number_sightings = n())

6
根据Ankit Gupta的回答:
如果你同时使用plyr和dplyr,你可以通过提供library_name::function_name(params)来使用特定库的函数,例如:
plyr::count(dataset$nationality)

4

我希望给出一个更全面的答案,结合了Ankit和aosmith的观点,并在此基础上进行补充。

dplyr包中的count()函数可以从两个不同的上下文中调用。第一个上下文是aosmith和Ankit建议的,它将数据框作为第一个参数调用count(),然后是你想要计数的变量,用逗号分隔。

count(df, var1)

或者

count(df, var1, var2)

第二种方法是使用 R 管道符(%>%)将数据框传递给 count() 函数。
df %>% count(var1)

或者

df %>% count(var1, var2)

在任何情况下都未提供数据框将导致问题中看到的“没有适用的方法”错误。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接