【问题标题】:How to Melt single column in R如何在 R 中熔化单列
【发布时间】:2017-06-07 22:18:52
【问题描述】:

如何将单柱从 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(names(x), lengths(x)) 中的错误:'times' 值无效

【问题讨论】:

  • Mar-17 是列名还是第一行?

标签: r reshape melt


【解决方案1】:

当我没有列名(而是将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")

【讨论】:

  • 感谢 Mike,它运行良好,您非常慷慨地重现数据。
猜你喜欢
  • 2020-02-06
  • 1970-01-01
  • 2019-11-30
  • 2018-03-29
  • 1970-01-01
  • 2014-07-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多