我有一个数据集,其中包含按行排序的数据:
*VarName1* - *VarValue1*
*VarName2* - *VarValue2*
*Etc.*
我希望它是VarNames成为单独的列。我通过使用以下代码实现了这一点:
DFP1 <- as.data.frame(t(DFP)) #DFP contains the data
现在,这是一个非常大的数据集。它包含多年(数百万行)的数据。上面的代码创建了一个具有&gt;的数据帧。 1E6列。我需要按每个条目拆分这些列。我在第一段数据中看到,每第86列都会出现一个新条目。所以,我试过这个:
tmp <- data.frame(
X = DFP$noFloat,
ind = rep(1:86, nrow(DFP)/86)
)
y <- rbind(DFP$nmlVar[1:86], unstack(tmp, X~ind))
这适用于几行。问题是多年来变量的数量增加了,我不能简单地假设每个条目的变量数量是相同的。这导致变量值与其名称不匹配。我正在寻找一种方法来根据变量名称匹配变量和值。
我是高级数据分析的新手,所以如果您还需要更多信息,请与我们联系。
编辑:我创建了一些DFP广告管理系统外观的示例数据,希望能让您更好地理解我的问题:
DFP <- data.frame(
nmlVar = c("Batch", "Mass", "Length", "Product","Batch", "Mass",
"Length", "Product", "Batch", "Mass", "Length", "Width", "Product"),
noFloat = c(254578, 20, 24, 24547, 254579, 23, 24, 24547, 254580, 20,
24, 19, 24547)
)
这里需要注意的重点是第三次重复出现新变量宽度。这对我的数据集来说是典型的,引入了新的变量。这里的关键指标是批处理,每次出现变量批处理时都应拆分。
样本数据的输出:
structure(list(nmlVar = structure(c(1L, 3L, 2L, 4L, 1L, 3L, 2L,
4L, 1L, 3L, 2L, 5L, 4L), .Label = c("Batch", "Length", "Mass",
"Product", "Width"), class = "factor"), noFloat = c(254578, 20,
24, 24547, 254579, 23, 24, 24547, 254580, 20, 24, 19, 24547)), .Names = c("nmlVar",
"noFloat"), row.names = c(NA, -13L), class = "data.frame")
答案 0 :(得分:2)
这就是你追求的目标吗?:
library(dplyr)
library(tidyr)
DFP %>%
mutate(sample = cumsum(nmlVar == 'Batch')) %>%
spread(nmlVar, noFloat)
给出:
sample Batch Length Mass Product Width 1 1 254578 24 20 24547 NA 2 2 254579 24 23 24547 NA 3 3 254580 24 20 24547 19