在 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
我有一个包含列 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