如何在R中将数据转换为事务格式



我有以下数据集,我想将其转换为事务格式。

sample_data<-data.frame(id=c(452,125,288,496,785,328,712,647),a=c(5,8,7,9,0,0,4,0),b=c(0,7,8,9,3,6,0,0),c=c(7,8,9,0,0,0,0,7),d=c(8,7,5,0,0,0,0,7))
sample_data
sample_data
id  a b c d
452 5 0 7 8
125 8 7 8 7
288 7 8 9 5
496 9 9 0 0
785 0 3 0 0
328 0 6 0 0
712 4 0 0 0
647 0 0 7 7

所需输出如下:

id      item
452     a c d
125     a b c d
288     a b c d
496     a b
785     b
328     b
712     a
647     c d

我如何在R中实现这一点?

有更简单的方法吗?

这里是一个使用pivot_longerfiltersummarizetidyverse解决方案。

library(dplyr)
library(stringr)
library(tidyr)
sample_data %>%
pivot_longer(a:d, names_to = "item") %>%
filter(value != 0) %>%
group_by(id) %>%
summarize(item = str_c(item, collapse = " "))
# A tibble: 8 x 2
id item   
<dbl> <chr>  
1   125 a b c d
2   288 a b c d
3   328 b      
4   452 a c d  
5   496 a b    
6   647 c d    
7   712 a      
8   785 b    

我们可以使用apply在行上循环,得到数值列的值不为0的数据的names,并将paste放在一起,然后cbind与数据的第一列

cbind(sample_data[1], item = apply(sample_data[-1], 1, 
function(x) paste(names(x)[x != 0], collapse = ' ')))

-输出

#   id    item
#1 452   a c d
#2 125 a b c d
#3 288 a b c d
#4 496     a b
#5 785       b
#6 328       b
#7 712       a
#8 647     c d

相关内容

  • 没有找到相关文章

最新更新