我有一个数据帧,看起来是这样的:

example <- data.frame(
  PID = c(11191, 11192, 21191, 21193),
  NS = c(1,5,9,13),
  NR = c(2,6,10,14), 
  SE = c(3,7,11,15), 
  GR = c(4,8,12,16)
)

我希望将数据帧转换为宽格式,这样PID的最后一位数就是分组变量.以下是所需的解决方案:

example_solution <- data.frame(
  target = c(1119, 2119),
  NS_1 = c(1,9),
  NR_1 = c(2,10),
  SE_1 = c(3, 11),
  GR_1 = c(4,12),
  NS_2 = c(5,NA),
  NR_2 = c(6, NA),
  SE_2 = c(7, NA),
  GR_2 = c(8, NA),
  NS_3 = c(NA,13),
  NR_3 = c(NA, 14),
  SE_3 = c(NA, 15),
  GR_3 = c(NA, 16)
)

我怎样才能做到这一点呢?谢谢你的帮助!

推荐答案

library(dplyr)
library(tidyr)
example %>%
  mutate(one = PID %% 10, PID = PID %/% 10) %>%
  pivot_wider(id_cols = PID, names_from = one,
              values_from = -c(PID, one), names_sep = "_")
# # A tibble: 2 × 13
#     PID  NS_1  NS_2  NS_3  NR_1  NR_2  NR_3  SE_1  SE_2  SE_3  GR_1  GR_2  GR_3
#   <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
# 1  1119     1     5    NA     2     6    NA     3     7    NA     4     8    NA
# 2  2119     9    NA    13    10    NA    14    11    NA    15    12    NA    16

您可以使用dplyr: order columns alphabetically in R%>% select(PID, sort(names(.))中的值来更改列顺序.

R相关问答推荐

如何删除多个.CSV文件的行

R Highcharts与两个位置关联的注释

通过使用str_detect对具有相似字符串的组进行分组

为什么观察不会被无功值变化触发?

将文件保存到新文件夹时,切换r设置以不必创建目录

如何通过ggplot2添加短轴和删除长轴?

使用R中的正则表达式将一列分割为多列

2个Rscript.exe可执行文件有什么区别?

plotly hover文本/工具提示在shiny 中不起作用

R中1到n_1,2到n_2,…,n到n_n的所有组合都是列表中的向量?

如何根据数据帧中的值从该数据帧中提取值?

您是否可以将组添加到堆叠的柱状图

R:用GGPLATE,如何在两个独立的变量中制作不同形状的散点图?

QY数据的处理:如何定义QY因素的水平

仅在R中的数据集开始和结束时删除所有 Select 列的具有NA的行

计算直线上点到参考点的总距离

如何计算R glm probit中的线性预测因子?

R仅当存在列时才发生变异

在ggploy中创建GeV分布时出错

在REST API中使用参数R