根据唯一标识符合并行数据

3

根据唯一标识符将数据聚合到行中?

我有一个数据框,其中包含唯一的id(音节)和持续时间。为了继续我的分析,我需要按音节聚合数据框。

因此,

syllable   duration
ba         0.20414850
a          0.06804950
na         0.11525535
a          0.09877130
na         0.36774874
ba         0.18228837
ba         0.22232325

应该长成这样:
syllable   duration_1    duration_2  duration_3
ba         0.20414850    0.18228837  0.22232325
a          0.06804950    0.09877130
na         0.11525535    0.36774874

我尝试使用dplyr的group_by函数

library(dplyr)
df %>%
  group_by(syllable) %>%
  summarise(duration = paste(duration, collapse = ","))

然而,这将产生以下结果:

syllable   duration    
ba         c(0.20414850,0.18228837,0.22232325)
a          c(0.06804950,0.09877130)
na         c(0.11525535,0.36774874)

谢谢你


在这种情况下,您需要为R提供一个“时间变量”,以便可以将数据重塑为“宽”格式。为此,您必须告诉R每个组内的每个观察值的编号。例如,“这是组_ba_的第一个观察值,这是第二个观察值,依此类推...”请尝试以下操作:library(data.table) SO <- as.data.table(SO) SO[, Time_Var := seq(1:.N), by = "syllable"] SO <- reshape(data = SO, direction = "wide", idvar = "syllable", timevar = "Time_Var") - Arturo Sbr
1个回答

1
你要找的是:
library(dplyr)

df %>%
  group_by(syllable) %>%
  mutate(dur = paste0("duration_", row_number())) %>%
  spread(dur, duration) %>% as.data.frame()

输出:

  syllable duration_1 duration_2 duration_3
1        a  0.0680495  0.0987713         NA
2       ba  0.2041485  0.1822884  0.2223233
3       na  0.1152554  0.3677487         NA

我只是添加了%>% as.data.frame()以便打印所有小数,否则这不是必需的。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接