r - R中有没有办法将组内的各种项目转换为多列?
问题描述
假设我有一个这样的数据框:
df<-data.frame(group=c(1, 1, 1, 1, 1,1, 2, 2, 2,2,2,2, 3,3,3,3,3,3),
date=c("2000-01-01", "2000-01-02", "2000-01-01", "2000-01-02", "2000-01-01", "2000-01-01",
"2000-01-03", "2000-01-04", "2000-01-05", "2000-01-03", "2000-01-04", "2000-01-05",
"2000-01-06", "2000-01-06", "2000-01-02", "2000-01-05", "2000-01-02", "2000-01-03"))
我基本上有另一个时间变量,我想与每个“组”进行比较,如果我在一行中有一个组中的所有日期,我应该能够(即如果“时间”小于 want_1 | want_2 ... 等等。所以是这样的:
group date want_1 want_2 want_3 want_4
1 1 2000-01-01 2000-01-01 2000-01-02 <NA> <NA>
2 1 2000-01-02 2000-01-01 2000-01-02 <NA> <NA>
3 1 2000-01-01 2000-01-01 2000-01-02 <NA> <NA>
4 1 2000-01-02 2000-01-01 2000-01-02 <NA> <NA>
5 1 2000-01-01 2000-01-01 2000-01-02 <NA> <NA>
6 1 2000-01-01 2000-01-01 2000-01-02 <NA> <NA>
7 2 2000-01-03 2000-01-03 2000-01-04 2000-01-05 <NA>
8 2 2000-01-04 2000-01-03 2000-01-04 2000-01-05 <NA>
9 2 2000-01-05 2000-01-03 2000-01-04 2000-01-05 <NA>
10 2 2000-01-03 2000-01-03 2000-01-04 2000-01-05 <NA>
11 2 2000-01-04 2000-01-03 2000-01-04 2000-01-05 <NA>
12 2 2000-01-05 2000-01-03 2000-01-04 2000-01-05 <NA>
13 3 2000-01-06 2000-01-06 2000-01-02 2000-01-05 2000-01-03
14 3 2000-01-06 2000-01-06 2000-01-02 2000-01-05 2000-01-03
15 3 2000-01-02 2000-01-06 2000-01-02 2000-01-05 2000-01-03
16 3 2000-01-05 2000-01-06 2000-01-02 2000-01-05 2000-01-03
17 3 2000-01-02 2000-01-06 2000-01-02 2000-01-05 2000-01-03
18 3 2000-01-03 2000-01-06 2000-01-02 2000-01-05 2000-01-03
请注意,组中的每个日期都填充了一个新列。
也欢迎其他建议,谢谢!
解决方案
所以我创建date_a
为
date_a <- c("2000-01-01", "2000-01-02", "2000-01-03", "2000-01-04")
date_a <- data.frame(want = c("want_1", "want_2", "want_3", "want_4"),date_a = as.Date(date_a))
crossing(df,date_a) %>%
mutate(flg = as.numeric(date < date_a)) %>%
select(-date_a) %>%
distinct() %>%
spread(want,flg)
现在,您的数据的缺点是您有多余的行,并且该distinct
功能将消除原始数据中的重复行。
推荐阅读
- assembly - 有人能告诉我我的 MIP 翻译成英文好不好?
- python-3.x - 在 Python 中匹配和转置数据
- javascript - 我的 Javascript 倒数计时器无法正常工作
- c# - C# 单元测试 Newtonsoft JSON 模型
- mysql - 购买表的 AVG 间隔长度
- django - Django 本地主机加载
- mysql - SQL Fiddle 无法创建外键
- regex - 正则表达式 Python:“拉出”整个组,但将其他所有内容保留在字符串中
- mysql - 使用 CASE 对 mysql 中的行求和时获取值
- python - 在 pandas 中按时间搜索或分组时间序列数据