我有一个数据框inputData,其列为acc_id,attrName,attrValue和timeStamp。 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
我尝试传播(inputData,attr_name,attr_val)来获取错误
答案 0 :(得分:2)
基于上面的例子,我得到了这个:
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