如何通过计算现有列来制作新列

时间:2019-02-04 04:37:30

标签: r dataframe group-by dplyr

我想通过在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

2 个答案:

答案 0 :(得分:2)

我们可以先gather个所有值,然后count个,通过paste先设置catvalue个值再创建{{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))