如何熔化R中的单个色谱柱

时间:2017-06-07 22:18:53

标签: r reshape melt

如何将单个色谱柱从T1熔化到T2。

T1			
Mar-17		T2	
328		Mar-17	328
29.57		Mar-17	29.57
38.483		Mar-17	38.483
31.26		Mar-17	31.26
37.3		Mar-17	37.3
60.026		Mar-17	60.026
47.059		Mar-17	47.059
40.215		Mar-17	40.215
51.79		Mar-17	51.79
45.284		Mar-17	45.284
41.271		Mar-17	41.271
42.411		Mar-17	42.411
 我应该使用什么ID来从T3

获取T4中的输出

T3				
Mar-17	Apr-17		T4	
328	396		Mar-17	328
29.57	216.57		Mar-17	29.57
38.483	116.483		Mar-17	38.483
31.26	168.26		Mar-17	31.26
37.3	128.3		Mar-17	37.3
60.026	82.026		Mar-17	60.026
47.059	113.059		Mar-17	47.059
40.215	165.215		Mar-17	40.215
51.79	80.79		Mar-17	51.79
45.284	185.284		Mar-17	45.284
41.271	183.271		Mar-17	41.271
42.411	204.411		Mar-17	42.411
			Apr-17	396
			Apr-17	216.57
			Apr-17	116.483
			Apr-17	168.26
			Apr-17	128.3
			Apr-17	82.026
			Apr-17	113.059
			Apr-17	165.215
			Apr-17	80.79
			Apr-17	185.284
			Apr-17	183.271
			Apr-17	204.411

当我使用堆栈时

T2 <- stack(T1)

正在提供错误消息

  

rep.int中的错误(名称(x),长度(x)):无效的“时间”值

1 个答案:

答案 0 :(得分:2)

我没有列名时能够重现您的错误(而是首先观察Mar-17Apr-17)所以我假设这就是您的数据结构化。如果Mar-17Apr-17是您的列名,则stack()应该有效。

在这种情况下,您可以将变量名称设置为第一行中的值,然后对除第一行之外的所有内容使用stack()

names(T1) <- T1[1,]
T2 <- stack(T1[-1, , drop = F])

head(T2)
#       values    ind
#1     328 Mar-17
#2   29.57 Mar-17
#3  38.483 Mar-17
#4   31.26 Mar-17
#5    37.3 Mar-17
#6  60.026 Mar-17

names(T3) <- T3[1,]
T4 <- stack(T3[-1,])

head(T4)
#  values    ind
#1    328 Mar-17
#2  29.57 Mar-17
#3 38.483 Mar-17
#4  31.26 Mar-17
#5   37.3 Mar-17
#6 60.026 Mar-17

数据:

T1 <- structure(list(c("Mar-17", "328", "29.57", "38.483", "31.26", 
          "37.3", "60.026", "47.059", "40.215", "51.79", "45.284", "41.271", 
          "42.411")), class = "data.frame", row.names = c(NA, -13L))

T3 <- structure(list(c("Mar-17", "328", "29.57", "38.483", "31.26", 
          "37.3", "60.026", "47.059", "40.215", "51.79", "45.284", "41.271", 
          "42.411"), c("Apr-17", "396", "216.57", "116.483", "168.26", 
          "128.3", "82.026", "113.059", "165.215", "80.79", "185.284", 
          "183.271", "204.411")), row.names = c(NA, -13L), class = "data.frame")