使用R,我如何将名称和标识符的列表转置到每个列中具有不同数量的项目的表中?

ruoxqz4g  于 2023-05-04  发布在  其他
关注(0)|答案(2)|浏览(148)

我有一个名字和部门的列表,每个部门有不同数量的名字。举个例子:

library(tidyverse)

df <- tribble(
  ~NAME,      ~DEPT,
  "Emma",     "Tox",
  "Sophia",   "CP",
  "Liam",     "QP",
  "Noah",     "QP", 
  "Olivia",   "Tox", 
  "Isabella", "QP",
  "Muhammed", "QP",
  "Abdullah", "QP",
  "Lea",      "Tox",
  "Matteo",   "CP")

我想要的是将这个列表转换为如下所示:

df_table <- tribble(
  ~CP,      ~QP,        ~Tox,
  "Sophia", "Abdullah", "Emma",   
  "Matteo", "Isabella", "Lea",
  NA,       "Liam",     "Olivia",
  NA,       "Muhammed", NA,
  NA,       "Noah",     NA)

注意,我希望各个列按字母顺序排序,并将空格表示为NA或“”。理想情况下,我还希望脚本提取一个唯一的部门列表,以生成最终表中的列,但不是至关重要的。
对于小的列表,这些都可以手动完成。然而,我的实际列表是a)更长,B)不断变化。我想自动创建这个表,这样我就可以维护一个包含姓名/部门的CSV,然后通过RMarkdown运行代码,在幻灯片上创建花名册表。
有什么想法吗

kpbwa7wx

kpbwa7wx1#

我们可以用

library(dplyr)
library(tidyr)
library(data.table)
df %>% 
 mutate(rn = rowid(DEPT)) %>% 
 pivot_wider(names_from = DEPT, values_from = NAME)

data.table

dcast(df, rowid(DEPT) ~ DEPT, value.var = 'NAME')[, -1]
xjreopfe

xjreopfe2#

在R中,你可以做:

data.frame(lapply(a<-unstack(df), `length<-`, max(lengths(a))))

      CP       QP    Tox
1 Sophia     Liam   Emma
2 Matteo     Noah Olivia
3   <NA> Isabella    Lea
4   <NA> Muhammed   <NA>
5   <NA> Abdullah   <NA>

相关问题