r - 将多行与R中的相同条目结合起来
问题描述
我有如下数据
| 年份 | Qrtrs |类型 |频率 |
| 1950 | JAS | 学士学位 | 1 |
| 1950 | 安德 | 学士学位 | 1 |
| 1950 | 安德 | 学士学位 | 1 |
| 1950 | 安德 | 由 | 2 |
我想生产这样的
+------+------+-----+----+----+
| Year | Qrts | All | BS | BY |
+------+------+-----+----+----+
| 1950 | JAS | 1 | 1 | 0 |
| 1950 | OND | 4 | 2 | 2 |
+------+------+-----+----+----+
我尝试使用tapply,但没有得到我想要的。
谢谢!
解决方案
您的示例数据,可复制和可用:
dat <- read.table(header=TRUE, stringsAsFactors=FALSE, text='
Year Qrtrs Month Type freq
1 1950 JAS 9 BS 1
2 1950 OND 10 BS 1
3 1950 OND 11 BS 1
4 1950 OND 12 BY 1 ')
使用dplyr
:
library(dplyr)
dat %>%
group_by(Year, Qrtrs, Type) %>%
summarize(count = sum(freq)) %>%
tidyr::spread(Type, count, fill=0) %>%
mutate(All = sum(BS:BY))
# # A tibble: 2 x 5
# # Groups: Year, Qrtrs [2]
# Year Qrtrs BS BY All
# <int> <chr> <dbl> <dbl> <int>
# 1 1950 JAS 1 0 1
# 2 1950 OND 2 1 3
使用data.table
:
library(data.table)
DT <- as.data.table(dat)
dcast(DT[,.(count = sum(freq)), by=c("Year", "Qrtrs", "Type")],
Year + Qrtrs ~ Type, value.var = "count", fun=sum)[
, All := BS+BY,][]
# Year Qrtrs BS BY All
# 1: 1950 JAS 1 0 1
# 2: 1950 OND 2 1 3
我认为您上面的预期输出不正确,它的计数BS
和BY
不一致。
从某处开始有一个base-R解决方案
aggregate(freq ~ Year + Qrtrs + Type , data=dat, FUN=sum)
但是我已经没时间了...
推荐阅读
- javascript - 将图像添加到每个图像之间的时间间隔的类
- python - 如何在 tkinter 中将图像设置为背景?
- python - QWebEngineUrlRequestInterceptor 不工作
- google-apps-script - 如果用户删除了附加组件的权限,则停止可安装触发器
- android - Android Studio 主题编辑器不显示预览?
- scrapy - Scrapy:保存网站
- python-3.x - ImportError:PYTHON FLASK 中没有名为“flask_jwt_extended”的模块
- sparql - 如何使用 SPARQL 从 DBpedia 中提取数据
- hibernate - 不使用 GET 或 LOAD 获取单个域类对象
- r - 如何计算一行中的数值数量