我想基于重复数据制作传播数据。我想基于重叠的行来累积列。例如,X2列重复5次。
它看起来与在tidyr程序包中使用传播功能相似,但有所不同。你能给我个主意吗?
输入:
X1 X2 X3
1 A 1 10
2 B 2 11
3 C 3 13
4 A 4 12
5 F 5 16
6 D 1 17
.
.
.
515 E 5 18
输出:
X2 X1.1 X3.1 X1.2 X3.2 ... 102 steps
1 1 A 10 D 17
2 2 B 11
3 3 C 13
4 4 A 12
5 5 F 16
答案 0 :(得分:1)
使用dplyr
和tidyr
,我们可以按X2
分组,并创建小标题,将unnest
设置为所需的格式。
我略微修改了您的数据以提供完整的示例:
library(tidyverse)
df1 %>%
group_by(X2) %>%
summarize_all(~as.list(.) %>%
setNames(seq_along(.)) %>%
as_tibble %>%
list) %>%
unnest(.sep = ".")
# # A tibble: 3 x 5
# X2 X1.1 X1.2 X3.1 X3.2
# <int> <chr> <chr> <int> <int>
# 1 1 A A 10 12
# 2 2 B F 11 16
# 3 3 C D 13 17
一种合法的整洁方式:
df1 %>%
mutate(i = cumsum(X2 == 1)) %>%
gather(key, value, X1,X3) %>%
unite(key,key,i, sep=".") %>%
spread(key, value)
# X2 X1.1 X1.2 X3.1 X3.2
# 1 1 A A 10 12
# 2 2 B F 11 16
# 3 3 C D 13 17
数据
df1 <- read.table(header=TRUE,stringsAsFactors=FALSE,text="X1 X2 X3
1 A 1 10
2 B 2 11
3 C 3 13
4 A 1 12
5 F 2 16
6 D 3 17")