我有这样一个数据帧:

  household person R01 R02 R03 R04 R05
1         1      1  NA   1   7   7  NA
2         1      2   1  NA   7   7  NA
3         1      3   3   3  NA  11  NA
4         1      4   3   3  11  NA  NA
5         2      1  NA   7  16  NA  NA
6         2      2   3  NA   7  NA  NA
7         2      3  15   3  NA  NA  NA


我正在try 添加新的列,它们是列R01R05的分组转置版本,如下所示:

  household person R01 R02 R03 R04 R05 R01x R02x R03x R04x R05x
1         1      1  NA   1   7   7  NA   NA    1    3    3   NA
2         1      2   1  NA   7   7  NA    1   NA    3    3   NA
3         1      3   3   3  NA  11  NA    7    7   NA   11   NA
4         1      4   3   3  11  NA  NA    7    7   11   NA   NA
5         2      1  NA   7  16  NA  NA   NA    3   15   NA   NA
6         2      2   3  NA   7  NA  NA    7   NA    3   NA   NA
7         2      3  15   3  NA  NA  NA   16    7   NA   NA   NA

我try 过使用t()和使用gather()spread()进行各种try ,但我不认为它们是为了实现这一点而设计的,因为我正在移动数据,而不仅仅是reshape 数据.

Example Code

df <- data.frame(household = c(rep(1,4),rep(2,3)),
                 person = c(1:4,1:3),
                 R01 = c(NA,1,3,3,NA,3,15),
                 R02 = c(1,NA,3,3,7,NA,3),
                 R03 = c(7,7,NA,11,16,7,NA),
                 R04 = c(7,7,11,rep(NA,4)),
                 R05 = rep(NA,7))

推荐答案

参考my previous answer,您可以在group_modify()内转换matrx:

library(dplyr)

df %>%
  group_by(household) %>%
  group_modify(~ {
    mat <- t(.x[-1][1:nrow(.x)])
    colnames(mat) <- paste0(rownames(mat), "x")
    cbind(.x, mat)
  }) %>%
  ungroup()

# # A tibble: 7 × 11
#   household person   R01   R02   R03   R04 R05    R01x  R02x  R03x  R04x
#       <dbl>  <int> <dbl> <dbl> <dbl> <dbl> <lgl> <dbl> <dbl> <dbl> <dbl>
# 1         1      1    NA     1     7     7 NA       NA     1     3     3
# 2         1      2     1    NA     7     7 NA        1    NA     3     3
# 3         1      3     3     3    NA    11 NA        7     7    NA    11
# 4         1      4     3     3    11    NA NA        7     7    11    NA
# 5         2      1    NA     7    16    NA NA       NA     3    15    NA
# 6         2      2     3    NA     7    NA NA        7    NA     3    NA
# 7         2      3    15     3    NA    NA NA       16     7    NA    NA

R相关问答推荐

当我们有多个特殊字符时,使用gsub删除名称和代码'

多个过滤器内的一个盒子在仪表板Quarto

根据文本字符串中的值粘贴新列

仅在Facet_WRAP()中的相应方面包含geom_abline()

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

从多层嵌套列表构建Tibble?

如何在使用箭头R包(箭头::OPEN_DATASSET)和dplyr谓词时编写具有整齐计算的函数?

在点图上绘制置信度或预测区间ggplot2

仅当后续值与特定值匹配时,才在列中回填Nas

按组跨多列创建伪变量

是否从列中删除★符号?

如何合并不同列表中的数据文件,包括基于名称的部分匹配,而不是一对一等价

R-如何在ggplot2中显示具有不同x轴值(日期)的多行?

基于R中的引用将向量值替换为数据框列的值

无法保存gglot的所有pdf元素

我有2011-2022年的年度数据.如何计算最低年份和最高年份之间的差额?

汇总数据:在跨越()all_of()Dynamic_list_of_vars=>;所选内容不能有缺失值的汇总()中出错

从多行中 Select 最小值

当R使用c()组合两个向量时会发生什么?

为哑铃图准备日期数据