R 如何将数据强制转换为非相等列?
我有一个事件数据集,按R 如何将数据强制转换为非相等列?,r,reshape2,R,Reshape2,我有一个事件数据集,按let进行分组,如下所示: set.seed(3) events <- data.frame( let = rep(LETTERS[1:2], each=3), age = c(0,sample(1:20, size=2), 0,sample(1:20, size=2)), value = sample(1:100, size=6)) let age value 1 A 0 61 2 A 4 60 3
let
进行分组,如下所示:
set.seed(3)
events <- data.frame(
let = rep(LETTERS[1:2], each=3),
age = c(0,sample(1:20, size=2),
0,sample(1:20, size=2)),
value = sample(1:100, size=6))
let age value
1 A 0 61
2 A 4 60
3 A 16 13
4 B 0 29
5 B 8 56
6 B 7 99
set.seed(3)
事件一个选项是将
的“年龄”分为几行,按该组获取max
行并“let”,然后重新塑造为“宽”格式
library(dplyr)
library(tidyr)
library(stringr)
events %>%
group_by(grp = cut(age, breaks = c(-Inf,0, 7, 14, 21),
labels = str_c("T", 0:3, "_value")), let) %>%
slice(which.max(value)) %>%
ungroup %>%
select(-age) %>%
group_by(let) %>%
complete(grp = unique(.$grp)) %>%
fill(value) %>%
pivot_wider(names_from = grp, values_from = value)
# A tibble: 2 x 5
# Groups: let [2]
# let T0_value T1_value T2_value T3_value
# <chr> <int> <int> <int> <int>
#1 A 61 60 60 13
#2 B 29 99 56 56
库(dplyr)
图书馆(tidyr)
图书馆(stringr)
事件%>%
分组依据(grp=切割(年龄,断裂=c(-Inf,0,7,14,21),
labels=str_c(“T”,0:3,“u值”),let)%>%
切片(哪个.max(值))%>%
解组%>%
选择(-age)%>%
分组依据(let)%>%
完成(grp=唯一(.$grp))%>%
填充(值)%>%
枢轴(名称从=grp,值从=value)
#一个tibble:2x5
#分组:let[2]
#设T0_值T1_值T2_值T3_值
#
#1 A 61 60 13
#2B2995656
数据
事件A的T3值为NA,B的T4值也为NA。这些NAs是否可以作为上一个时间值列出?那么分别是60和56。是否有必要填写最大年龄的值,以NA列出值?@EricFrey您可以作为一个新问题发布,以便更清楚地提交新问题:
library(dplyr)
library(tidyr)
library(stringr)
events %>%
group_by(grp = cut(age, breaks = c(-Inf,0, 7, 14, 21),
labels = str_c("T", 0:3, "_value")), let) %>%
slice(which.max(value)) %>%
ungroup %>%
select(-age) %>%
group_by(let) %>%
complete(grp = unique(.$grp)) %>%
fill(value) %>%
pivot_wider(names_from = grp, values_from = value)
# A tibble: 2 x 5
# Groups: let [2]
# let T0_value T1_value T2_value T3_value
# <chr> <int> <int> <int> <int>
#1 A 61 60 60 13
#2 B 29 99 56 56
events <- structure(list(let = c("A", "A", "A", "B", "B", "B"), age = c(0L,
4L, 16L, 0L, 8L, 7L), value = c(61L, 60L, 13L, 29L, 56L, 99L)),
class = "data.frame", row.names = c("1",
"2", "3", "4", "5", "6"))