首页 > 解决方案 > 合并列向量,然后合并到特定格式的数据表中

问题描述

我想创建一个数据表,R以一种很好的格式显示最终结果。我的最终结果如下:

NENA.day <- c(42)
NENA.weeks <- c(38, 40, 41)
EQ.day <- c(20)
EQ.weeks <- c(17, 12, 12)
K.day <- c(10)
K.weeks <- c(12, 15, 14)

数据表应如下所示:

在此处输入图像描述

我怎样才能以这种方式组合所有向量,得到下表和相应的列名和行名?图片中的数据表是在Excel中创建的,结果数据表应该是在Excel中创建的R

标签: rvectormergedatatable

解决方案


我们可以得到 a 中的向量list并将split其分组

lst1 <- mget(ls(pattern = 'NENA|EQ|K'))
out <- sapply(split(lst1, sub("\\..*", "", names(lst1))), unlist)
row.names(out) <- toupper(sub(".*\\.(.)\\D+(\\d*)", "\\1\\2", row.names(out)))

-输出

out
#   EQ  K NENA
#D  20 10   42
#W1 17 12   38
#W2 12 15   40
#W3 12 14   41

list由于我们有很多向量对象,mgetnamed list我们从ls. 曾经,它在 a 中list,然后我们split通过从ie 删除 '.day'、'.weeks'、循环中list删除子字符串来对嵌套列表组。with和嵌套为“EQ”、“K”、“NENA”中的每一个创建一个单曲。nameslistsapplyunlistlistvector


或另一种选择tidyverse

library(dplyr)
library(tidyr)
library(tibble)
library(stringr)
library(data.table)
enframe(lst1) %>%
   unnest(c(value)) %>% 
   separate(name, into = c('name', 'dayweek'), sep="\\.") %>%
   mutate(rn = rowid(name)) %>% 
   pivot_wider(names_from = name, values_from = value) %>% 
   select(-rn) %>%
   mutate(dayweek = str_c(toupper(substr(dayweek, 1, 1)), 
                    rowid(dayweek), sep="+")) %>%
   column_to_rownames('dayweek')

-输出

#    EQ  K NENA
#D+1 20 10   42
#W+1 17 12   38
#W+2 12 15   40
#W+3 12 14   41

推荐阅读