我有一些长格式的数据,我想广泛使用。 问题是数据采用的格式没有一条信息可以使传播变得容易。为了解决这个问题,我必须在数据框中创建一个列,从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"))
干杯
答案 0 :(得分:4)
另一种方法是使用data.table::rowid
。
df[,fid := rowid(class)]
答案 1 :(得分:1)
创建列'fid'的data.table方法是将data.frame
转换为data.table
(setDT(df)
),按'class'分组,获取行序列(seq_len(.N)
)并将其分配(:=
)为'fid'
setDT(df)[, fid := seq_len(.N), class]
但是,如果打算使用dcast
,则根本不需要创建列,因为有一个rowid
函数可以直接在公式中用作@ mt1022建议