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"))