在 R 中正确使用传播:错误

Using spread correctly in R: Error

我有一个包含列 acc_id、attrName、attrValue 和 timeStamp 的数据框 inputData。 acc_id 列将有重复的条目,因为数据的示例标题如下所示:

acc_id, attr_name, attr_value, timeStamp
123      abcVar1    138         Nov 1 2017
123      abcVar2    10          Nov 1 2017
123      abcVar3    2124        Nov 1 2017
468      abcVar1    13         Nov 9 2017
468      abcVar2    13458         Nov 9 2017
468      abcVar3    1238         Nov 9 2017

这种情况可以概括为 attr_name 将有更多的不仅仅是 3 个唯一变量。

需要转换成格式

acc_id abcVar1 abcVar2 abcVar3 timeStamp
123     138      10      2124  Nov 1 2017
468     13       13458   1238  Nov 9 2017

我试过 spread(inputData,attr_name, attr_val) 得到错误

根据你上面的例子,我得到了这个:

library(tidyr)

df = read.table(text = "
acc_id attr_name attr_value timeStamp
123      abcVar1    138         Nov_1_2017
123      abcVar2    10          Nov_1_2017
123      abcVar3    2124        Nov_1_2017
468      abcVar1    13          Nov_9_2017
468      abcVar2    13458       Nov_9_2017
468      abcVar3    1238        Nov_9_2017
", header=T, stringsAsFactors=F)

spread(df, attr_name, attr_value)

#   acc_id  timeStamp abcVar1 abcVar2 abcVar3
# 1    123 Nov_1_2017     138      10    2124
# 2    468 Nov_9_2017      13   13458    1238

也许您的示例数据框并不代表您的实际数据集。 我无法复制你的问题。

但是,当有像这样的重复行时,它似乎会中断:

library(tidyr)
library(dplyr)

df = read.table(text = "
acc_id attr_name attr_value timeStamp
123      abcVar1    138         Nov_1_2017
123      abcVar2    10          Nov_1_2017
123      abcVar3    2124        Nov_1_2017
468      abcVar1    13          Nov_9_2017
468      abcVar1    13          Nov_9_2017
468      abcVar2    13458       Nov_9_2017
468      abcVar3    1238        Nov_9_2017
", header=T, stringsAsFactors=F)

spread(df, attr_name, attr_value)

# Error: Duplicate identifiers for rows (4, 5)

# deduplicate and reshape
df %>%
  distinct() %>%
  spread(attr_name, attr_value)

#   acc_id  timeStamp abcVar1 abcVar2 abcVar3
# 1    123 Nov_1_2017     138      10    2124
# 2    468 Nov_9_2017      13   13458    1238