合并相似(但不相等)的行并计算 R 中的不同分类变量
Consolidating similar (but not equal) rows and counting the differing categorical variable in R
我有以下数据框(‘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.
Type:用户的类型,分类,对于所有具有该ID的行都是一致的。
Count:用户的计数,连续并且对于具有该ID的所有行都是一致的。
Mark:15 个 categorical 符号之一,不同的符号可能不同
具有相同 ID 的行。
目前,出现的每个标记对应一行,因此每个ID有多个行。
不同ID的标记数量不同(4-50之间任意)。
我需要做什么:
将具有相同ID的行合并为一行,其中包含所有一致的信息(Type/Count),以及出现的所有标记的列表(或计数)对于那个ID。此列表需要反映每个标记针对该 ID 出现的频率(例如,如果同一标记针对单个 ID 出现两次,则需要反映这一点,就像第 2 行和第 4 行中的 U1 一样)。
统计每个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
感谢您的帮助!
我们可以用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
我有以下数据框(‘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.
Type:用户的类型,分类,对于所有具有该ID的行都是一致的。
Count:用户的计数,连续并且对于具有该ID的所有行都是一致的。
Mark:15 个 categorical 符号之一,不同的符号可能不同 具有相同 ID 的行。
目前,出现的每个标记对应一行,因此每个ID有多个行。
不同ID的标记数量不同(4-50之间任意)。
我需要做什么:
将具有相同ID的行合并为一行,其中包含所有一致的信息(Type/Count),以及出现的所有标记的列表(或计数)对于那个ID。此列表需要反映每个标记针对该 ID 出现的频率(例如,如果同一标记针对单个 ID 出现两次,则需要反映这一点,就像第 2 行和第 4 行中的 U1 一样)。
统计每个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
感谢您的帮助!
我们可以用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