我有不同城市的数据集和他们拥有的不同运动队:
**City** **Basketball** **Soccer** **Tennis** **Football**
AA Titans Astros Royals Eagles
AA Crimson NA Falcons Packers
AA NA Phoenix Tigers NA
AA Goblins NA Lions NA
BB NA NA NA NA
BB Bears Rockets Broncos NA
CC Pelicans Wildfires Panthers NA
CC NA Bobcats Blizzard NA
CC NA NA Tornadoes NA
CC NA NA Hurricanes NA
我想按城市对数据进行分组,并找到每个城市每个列的NA总数。我该怎么做呢?我在做了一些研究后试过这个
aggregate(df[,2:4], by=list(df$City), colSums(is.na(df)))
但它不起作用......
答案 0 :(得分:1)
基地R是你的敌人。
data.table
更友善:
library(data.table)
setDT(df) # <- convert to data.table
# going column-by-column, count NA
df[ , lapply(.SD, function(x) sum(is.na(x))), by = City]
有关详情,请参阅Getting Started with data.table
,primer on .SD
和this on the use of lapply(.SD,...)
。
请注意,使用colSums
需要将data.frame
转换为matrix
,这会强制所有列都具有相同的类(此处为character
)如果他们不是,这可能是昂贵的。
答案 1 :(得分:0)
您的aggregate
语法有点过时了。使用正确的自定义匿名函数,它应该工作:
aggregate(df[,2:4], by=list(df$City), FUN=function(x) { sum(is.na(x)) })