在R

时间:2018-11-30 22:13:59

标签: r

我在Excel文件中有许多工作表都适合这个基本问题。详细信息:

  • 每个位置都在第一列中找到,但是直到包含“ Loc”的行之后才开始
  • 在第二列的第一行中找到了变量的名称,但是没有重复,但是在第14列中再次找到了
  • 在第二列的第二行中找到测量变量的年份,但不重复,但是在第14列中找到第二年
  • 在第二列的第三行中找到测量变量的月份
  • 从第4行第2列开始找到变量的值。

一个示例数据框如下所示(年份和月份以外的值并不真正相关,因此其中某些重复):

KPI <- data.frame(X1 = c(NA, NA, "Loc", 2941, 2963, 2222),
                  X2 = c("HH", 2017, 1, 45221, 50181, 13959),
                  X3 = c(NA, NA, 2, 16518, 1550, 5000),
                  X4 = c(NA, NA, 3, 45111, 4800, 4600),
                  X5 = c(NA, NA, 4, 45111, 4800, 4600),
                  X6 = c(NA, NA, 5, 45111, 4800, 4600),
                  X7 = c(NA, NA, 6, 45111, 4800, 4600),
                  X8 = c(NA, NA, 7, 45111, 4800, 4600),
                  X9 = c(NA, NA, 8, 45111, 4800, 4600),
                  X10 = c(NA, NA, 9, 45111, 4800, 4600),
                  X11 = c(NA, NA, 10, 45111, 4800, 4600),
                  X12 = c(NA, NA, 11, 45111, 4800, 4600),
                  X13 = c(NA, NA, 12, 45111, 4800, 4600),
                  X14 = c("HH", 2018, 1, 40000, 4200, 4500),
                  X15 = c(NA, NA, 2, 45111, 4800, 4600),
                  X16 = c(NA, NA, 3, 45111, 4800, 4600),
                  X17 = c(NA, NA, 4, 45111, 4800, 4600),
                  X18 = c(NA, NA, 5, 45111, 4800, 4600),
                  X19 = c(NA, NA, 6, 45111, 4800, 4600),
                  X20 = c(NA, NA, 7, 45111, 4800, 4600),
                  X21 = c(NA, NA, 8, 45111, 4800, 4600),
                  X22 = c(NA, NA, 9, 45111, 4800, 4600),
                  X23 = c(NA, NA, 10, 45111, 4800, 4600),
                  X24 = c(NA, NA, 11, 45111, 4800, 4600))

但是我需要将上面的内容转换为三列:

  • 位置
  • 日期(每月)
  • 变量和值

我需要一个函数,该函数本质上将不列出变量名称,年份和月份,然后将月份和年份合并以形成第二列,并在第三列中融化并散布该值,以用于适当的度量和位置日期。我尝试过,但是前几列中缺少值会导致标题问题和长度问题。

就像这样,但是对于2017年至2018年所有日期中第1列中的每个位置,我都可以重写以阅读excel工作簿中的每个工作表,但是最好的答案也应该包括这一点,感谢任何人的帮助,我不能是唯一的一个吗?

KPIdesire <- data.frame(Loc = c(2941, 2941, 2941),
                  Date = c("1-2017", "2-2017", "3-2017"),
                  HH = c(45221, 16518, 54111))

0 个答案:

没有答案