繁体   English   中英

聚合R数据框中的数据

[英]Aggregating Data in R dataframe

我有这个数据框:

   ers1 task
 t1    3     t1
 t2    3     t2
 t3    3     t3
 t4    4     t4
 t5    3     t5
 t6    4     t6
 t7    4     t7
 t8    3     t8

数据描述了一组员工的任务分配(8个不同的任务)。 我想汇总给定员工的任务,以获取如下信息:

 ers task1 task2 task3 task4 task5
 3   t1    t2     t3    t5    t8
 4   t4    t6     t7   

有什么建议吗? 谢谢

请参阅基于R的以下解决方案,了解一种创新的方法。

d1 <- data.frame(ers1 = c(3,3,3,4,3,4,4,3), task = paste0("t",1:8)) # raw data
d2 <- table(d1) # use table to do the reshaping work here
l1 <- apply(d2, 1, function(x) colnames(d2)[index(x)*x]) # use the 0s and 1s to fill tasks
d3 <- t(sapply(l1, '[', seq(max(sapply(l1, length))))) # combine lists of varying lengths
colnames(d3) <- paste0("t",1:ncol(d3)) # create colnames
d3[is.na(d3)] <- "" # change NAs to blanks as desired
d3
#  t1   t2   t3   t4   t5  
#3 "t1" "t2" "t3" "t5" "t8"
#4 "t4" "t6" "t7" ""   ""  

就个人而言,我会在得到l1 (清单1)后停止,因为它似乎对编程/应用函数更有用。

感谢您让我知道tidyverse库的传播命令。

我一口气解决了这个问题

spread(ers1, key=task, value = task)

也是使用从data.table split的替代方法

library(data.table)
split(setDT(d1),by=c("ers1"),keep.by = FALSE)

$`3`
   task
1:   t1
2:   t2
3:   t3
4:   t5
5:   t8

$`4`
   task
1:   t4
2:   t6
3:   t7

然后,获取所需的格式:

sapply( split(setDT(d1),by="ers1",keep.by = FALSE),'[',1:5)
$`3.task`
[1] t1 t2 t3 t5 t8
Levels: t1 t2 t3 t4 t5 t6 t7 t8

$`4.task`
[1] t4   t6   t7   <NA> <NA>
Levels: t1 t2 t3 t4 t5 t6 t7 t8

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM