从R中的数据帧中获取具有多个单独观察的组级观察计数
如何获得这样的数据帧:从R中的数据帧中获取具有多个单独观察的组级观察计数,r,dataframe,R,Dataframe,如何获得这样的数据帧: soccer_player country position "sam" USA left defender "jon" USA right defender "sam" USA left midfielder "jon" USA offender "bob" England goalie "julie" England central midfie
soccer_player country position
"sam" USA left defender
"jon" USA right defender
"sam" USA left midfielder
"jon" USA offender
"bob" England goalie
"julie" England central midfielder
"jane" England goalie
如图所示(每个国家拥有唯一玩家的国家):
明显的复杂之处在于每个玩家都有多个观察值,所以我不能简单地通过表格(df$country)
来获得每个国家的观察值
我一直在玩table()
和merge()
函数,但运气不好。这里有一个方法:
as.data.frame(table(unique(d[-3])$country))
# Var1 Freq
# 1 England 3
# 2 USA 2
删除第三列,删除所有重复的国家/地区名称对,然后统计每个国家/地区的出现次数。不使用任何软件包,您可以执行以下操作:
List = by(df, df$country, function(x) length(unique(x$soccer_player)))
DataFrame = do.call(rbind, lapply(names(List), function(x)
data.frame(country=x, player_count=List[[x]])))
# country player_count
#1 England 2
#2 USA 2
使用类似于数据的东西更容易。表
:
dt = data.table(df)
dt[,list(player_count = length(unique(soccer_player))),by=country]
下面是一个sqldf解决方案:
library(sqldf)
sqldf("select country, count(distinct soccer_player) player_count
from df
group by country")
## country player_count
## 1 England 2
## 2 USA 2
as.data.frame(xtabs(~ country, unique(df[1:2])), responseName = "player_count")
## country player_count
## 1 England 2
## 2 USA 2
下面是一个基本的R解决方案:
library(sqldf)
sqldf("select country, count(distinct soccer_player) player_count
from df
group by country")
## country player_count
## 1 England 2
## 2 USA 2
as.data.frame(xtabs(~ country, unique(df[1:2])), responseName = "player_count")
## country player_count
## 1 England 2
## 2 USA 2
提供了一个紧凑的解决方案:
library(sqldf)
sqldf("select country, count(distinct soccer_player) player_count
from df
group by country")
## country player_count
## 1 England 2
## 2 USA 2
as.data.frame(xtabs(~ country, unique(df[1:2])), responseName = "player_count")
## country player_count
## 1 England 2
## 2 USA 2
数据:
使用
聚合
,再增加一个基本R选项:
> aggregate(soccer_player ~ country, dd, FUN = function(x) length(unique(x)))
# country soccer_player
#1 England 3
#2 USA 2
位置不保证是唯一的。现在在R试着,但不确定这是否有效。这不是假设。好的,谢谢Matthew。我将对它进行研究,如果这个方法有效的话,它将简洁地标记为答案。非常感谢。更好的标题建议?