在R中对数据帧中的元素进行计数

在R中对数据帧中的元素进行计数,r,string,dplyr,plyr,R,String,Dplyr,Plyr,我有这样一个数据框: ID TYPE 100010700239816 932100Y 100010700239816 9DDDDDDY 100010700239822 0000000000011222211121110100000000000000Y ID 9 3 2 1 0

我有这样一个数据框:

      ID                          TYPE
  100010700239816                932100Y
  100010700239816                9DDDDDDY
  100010700239822                0000000000011222211121110100000000000000Y
    ID                9   3   2   1   0   Y   D
 100010700239816      2   1   1   1   2   2   6
 100010700239822      0   0   5   9   11  1   0
输出应如下所示:

      ID                          TYPE
  100010700239816                932100Y
  100010700239816                9DDDDDDY
  100010700239822                0000000000011222211121110100000000000000Y
    ID                9   3   2   1   0   Y   D
 100010700239816      2   1   1   1   2   2   6
 100010700239822      0   0   5   9   11  1   0
这只是一个样本数据,在一个单元格中可能有不同的元素,所有这些元素的计数就是我想要的

我试过:

 a <- count(TEST$TYPE)

a我们可以将“TYPE”按“ID”和
dcast分组为“wide”格式

library(data.table)
dcast(setDT(df1)[, unlist(strsplit(TYPE, "")) , ID], ID ~V1)

我们还可以使用
tidyverse
中的函数。我们可以
strsplit
字符串,
unest
字符串和
count
每个字符串ID组合的编号。最后,我们可以
扩展
数据帧以获得所需的输出(
dt2

dt%
unest()%>%
计数(ID,类型)%%>%
排列(类型,n,填充=0)%>%
选择(c(“ID”、“9”、“3”、“2”、“1”、“0”、“Y”、“D”))

使用stringr的另一种方法

df2 <- aggregate(TYPE ~  ID, data=df, FUN=paste, collapse='')
df2[, unique(unlist(strsplit(df2$TYPE, "")))] <- 0
library(stringr)
df2[, unique(unlist(strsplit(df2$TYPE, "")))] <- sapply(colnames(df2[, unique(unlist(strsplit(df2$TYPE, "")))]), 
                                                      function(i) str_count(df2$TYPE, i))

df2 Hello@akrun,我在strsplit(TYPE,”)中收到一个错误,它说找不到对象“TYPE”:/可能必须事先将data.frame转换为data.table。