我有以下数据框('mydf'):
ID Type Count Mark
U1 A 50 R1
U1 A 50 R3
U1 A 50 R4
U1 A 50 R3
U2 B 24 R2
U2 B 24 R5
U3 A 88 R1
每行包含4个变量:
ID :用户的ID。
输入:用户的类型,分类,并且对于具有该ID的所有行都是一致的。
计数:用户的计数,连续,并且对于具有该ID的所有行都是一致的。
标记:15个分类符号中的一个,可能因不同而异 具有相同ID的行。
目前,每个标记出现一行,因此每个ID有多行。
不同ID(4-50之间)的标记数不同。
我需要做什么:
将具有相同ID的行合并为一行,其中包含所有一致信息(类型/计数),以及为该ID显示的所有标记的列表(或计数)。此列表需要反映每个标记对该ID的显示频率(例如,如果单个ID出现两次相同的标记,则需要反映出来,如第2行和第4行中的U1所示)。
< / LI>计算每个ID显示的每个标记的时间。
计算每个ID的总分数。
只要存在2和3中描述的计数,就不需要列出每个ID的标记(参见下面的预期输出)。
预期输出(大约):
ID Type Count Mark_R1 Mark_R2 Mark_R3 Mark_R4 Mark_R5 Mark_Total
U1 A 50 1 0 2 1 0 3
U2 B 24 0 1 0 0 1 2
U3 A 88 1 0 0 0 0 1
感谢您的帮助!
答案 0 :(得分:0)
我们可以使用dplyr
library(dplyr)
library(tidyr)
mydf %>%
count(ID, Type, Count, Mark) %>%
spread(Mark, n, fill = 0) %>%
ungroup() %>%
mutate(Total = rowSums(.[grep("R\\d+", names(.))]))
# ID Type Count R1 R2 R3 R4 R5 Total
# <chr> <chr> <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#1 U1 A 50 1 0 2 1 0 4
#2 U2 B 24 0 1 0 0 1 2
#3 U3 A 88 1 0 0 0 0 1