我想通过在R中进行group_by来创建其他一些列。
原始表格如下所示
userID cat1 cat2
a f 3
a f 3
a u 1
a m 1
b u 2
b m 1
b m 2
我按用户ID对它们进行分组,并希望它像这样
userID cat1_f cat1_m cat1_u cat2_1 cat2_2 cat2_3
a 2 1 1 2 0 1
b 0 2 1 1 2 0
答案 0 :(得分:2)
我们可以先gather
个所有值,然后count
个,通过paste
先设置cat
和value
个值再创建{{1} }使用spread
恢复为宽格式。
fill=0
答案 1 :(得分:1)
我们可以只使用table
中的base R
table(df)
# cat1
#userID f m u
# a 2 1 1
# b 0 2 1
或者使用dcast
中的data.table
library(data.table)
dcast(setDT(df), userID ~ paste0('cat1_', cat1))
df <- structure(list(userID = c("a", "a", "a", "a", "b", "b", "b"),
cat1 = c("f", "f", "u", "m", "u", "m", "m")), class = "data.frame",
row.names = c(NA, -7L))