在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。