R data.table列,沿其他列中的唯一值计数

时间:2018-04-13 03:04:35

标签: r data.table tidyr

我有一些长格式的数据,我想广泛使用。 问题是数据采用的格式没有一条信息可以使传播变得容易。为了解决这个问题,我必须在数据框中创建一个列,从1到另一列中每个唯一条目的长度。

在下面的过程中,是否有一个data.table方式使列“fid”?

library(data.table)
library(tidyverse)

# data:
df <- data.frame(class = c('1', '1', '1', '2', '3', '3'),
                 A = 1:6,
                 B = 11:16)

# create counting column
df <- df %>% group_by(class) %>% mutate(fid=1:n())

# spread using dcast
dcast(setDT(df), class ~ fid, value.var = c("A", "B")) 

干杯

2 个答案:

答案 0 :(得分:4)

另一种方法是使用data.table::rowid

df[,fid := rowid(class)]

答案 1 :(得分:1)

创建列'fid'的data.table方法是将data.frame转换为data.tablesetDT(df)),按'class'分组,获取行序列(seq_len(.N))并将其分配(:=)为'fid'

setDT(df)[, fid := seq_len(.N), class]

但是,如果打算使用dcast,则根本不需要创建列,因为有一个rowid函数可以直接在公式中用作@ mt1022建议