r - 基于一个列模态和其他列的新列

我找不到这个问题的答案,但也许我用了错误的关键字,如果是这样的话,请提前道歉。 基本上我有一个看起来像这样的数据框:

  code class Var1 Var2
1   U1     A    1    3
2   U2     A    5   43
3   U1     B    6    3
4   U2     B    6   12
5   U1     C   87    7
6   U2     C    1    8

可以使用以下代码重现:

df <- data.frame(code=c("U1","U2","U1","U2","U1","U2"),class = c("A","A","B","B","C","C"), Var1 = c(1,5,6,6,87,1), Var2 = c(3,43,3,12,7,8))

我想通过基于“类”列模态和其他列创建新列,同时保持“代码”列不变,使其看起来像这样:

  Code Var1.A Var2.A Var1.B Var2.B Var1.C Var2.C
1   U1      1      3      6      3     87      7
2   U2      5     43      6     12      1      8

第二个数据帧可以使用这条线复制:

df2 <- data.frame(Code=c("U1","U2"),Var1.A = c(1,5), Var2.A = c(3,43), Var1.B = c(6,6),Var2.B=c(3,12),Var1.C=c(87,1),Var2.C=c(7,8))

请注意我的真实数据框比这个例子中的要长得多,我可能需要一个自动化的解决方案

非常感谢!

最佳答案

您可以使用以下解决方案。在这种情况下,我们使用 glue 语法来创建自定义列名。 .value 指的是我为值选择的列名,class 是以前存储在 class 列中的值,带有文字点 . 它们之间的关系如下:

library(tidyr)

df %>%
  pivot_wider(names_from = "class", values_from = c("Var1", "Var2"), 
              names_glue = "{.value}.{class}")

# A tibble: 2 x 7
  code  Var1.A Var1.B Var1.C Var2.A Var2.B Var2.C
  <chr>  <dbl>  <dbl>  <dbl>  <dbl>  <dbl>  <dbl>
1 U1         1      6     87      3      3      7
2 U2         5      6      1     43     12      8

https://stackoverflow.com/questions/68701681/

相关文章:

javascript - 如何使用 Axios 拦截器向响应添加一些 header ?

c# - 如何在控制台应用程序 .NET Core (C#) 中制作打开文件对话框?

reactjs - 如何在 onSubmit 事件中使用 react-query useQuery?

c - 通过在未初始化的数据段 (bss) 中打印 "garbage values",我们可以映射出

python - 如何用 Pandas 构建矢量化函数?

css - 注入(inject)具有特定范围的 Chakra UI 全局样式

string - 函数不想使用函数参数返回字符串切片

string - 将两个不同列上第 n 次出现的 'foo' 和 'bar' 替换为相应列中所提供文

python - 根据python中另一个字符串元素的数量删除字符串元素

java - 使用同步(锁定对象) block 时,静态锁定对象是否需要是最终的?