r - R 熔化重塑数据
问题描述
这是我的数据:
Day Morning_1_id Var1 Morning_2_id Var2 Afternoon_1_id Var3 Afternoon_2_id Var4
1 20180501-033-000001 3.156667 20180501-033-000002 2.866667 20180501-033-000008 2.946667 20180501-033-000009 3.133333
2 20180502-033-000001 2.986667 20180502-033-000002 2.930000 20180502-033-000020 3.076667 20180502-033-000021 3.013333
3 20180503-033-000001 3.073333 20180503-033-000002 3.070000 20180503-033-000011 3.106667 20180503-033-000012 2.900000
4 20180507-033-000001 3.236667 20180507-033-000002 2.990000 20180507-033-000015 3.043333 20180507-033-000016 3.116667
5 20180508-033-000001 3.030000 20180508-033-000002 3.150000 20180508-033-000015 3.156667 20180508-033-000017 3.343333
6 20180509-033-000001 3.010000 20180509-033-000002 3.020000 20180509-033-000007 3.000000 20180509-033-000008 3.156667
7 20180510-033-000001 2.916667 20180510-033-000002 3.103333 20180510-033-000007 3.336667 20180510-033-000008 3.066667
8 20180511-033-000001 3.293333 20180511-033-000002 3.163333 20180511-033-000013 2.980000 20180511-033-000014 2.940000
9 20180514-033-000001 3.136667 20180514-033-000002 3.186667 20180514-033-000007 2.766667 20180514-033-000008 3.100000
10 20180516-033-000001 3.116667 20180516-033-000002 3.283333 20180516-033-000008 3.133333 20180516-033-000009 3.040000
11 20180517-033-000003 2.843333 20180517-033-000004 3.120000 20180517-033-000008 3.060000 20180517-033-000009 3.033333
12 20180518-033-000001 3.033333 20180518-033-000002 3.290000 20180518-033-000007 3.006667 20180518-033-000008 2.973333
13 20180521-033-000002 3.173333 20180521-033-000003 2.993333 20180521-033-000008 2.983333 20180521-033-000009 3.020000
14 20180523-033-000001 3.336667 20180523-033-000002 3.026667 20180523-033-000007 3.300000 20180523-033-000008 3.210000
可复制形式:
structure(list(Day = 1:14, Morning_1_id = structure(1:14, .Label = c("20180501-033-000001",
"20180502-033-000001", "20180503-033-000001", "20180507-033-000001",
"20180508-033-000001", "20180509-033-000001", "20180510-033-000001",
"20180511-033-000001", "20180514-033-000001", "20180516-033-000001",
"20180517-033-000003", "20180518-033-000001", "20180521-033-000002",
"20180523-033-000001"), class = "factor"), Var1 = c(3.156666667,
2.986666667, 3.073333333, 3.236666667, 3.03, 3.01, 2.916666667,
3.293333333, 3.136666667, 3.116666667, 2.843333333, 3.033333333,
3.173333333, 3.336666667), Morning_2_id = structure(1:14, .Label = c("20180501-033-000002",
"20180502-033-000002", "20180503-033-000002", "20180507-033-000002",
"20180508-033-000002", "20180509-033-000002", "20180510-033-000002",
"20180511-033-000002", "20180514-033-000002", "20180516-033-000002",
"20180517-033-000004", "20180518-033-000002", "20180521-033-000003",
"20180523-033-000002"), class = "factor"), Var2 = c(2.866666667,
2.93, 3.07, 2.99, 3.15, 3.02, 3.103333333, 3.163333333, 3.186666667,
3.283333333, 3.12, 3.29, 2.993333333, 3.026666667), Afternoon_1_id = structure(1:14, .Label = c("20180501-033-000008",
"20180502-033-000020", "20180503-033-000011", "20180507-033-000015",
"20180508-033-000015", "20180509-033-000007", "20180510-033-000007",
"20180511-033-000013", "20180514-033-000007", "20180516-033-000008",
"20180517-033-000008", "20180518-033-000007", "20180521-033-000008",
"20180523-033-000007"), class = "factor"), Var3 = c(2.946666667,
3.076666667, 3.106666667, 3.043333333, 3.156666667, 3, 3.336666667,
2.98, 2.766666667, 3.133333333, 3.06, 3.006666667, 2.983333333,
3.3), Afternoon_2_id = structure(1:14, .Label = c("20180501-033-000009",
"20180502-033-000021", "20180503-033-000012", "20180507-033-000016",
"20180508-033-000017", "20180509-033-000008", "20180510-033-000008",
"20180511-033-000014", "20180514-033-000008", "20180516-033-000009",
"20180517-033-000009", "20180518-033-000008", "20180521-033-000009",
"20180523-033-000008"), class = "factor"), Var4 = c(3.133333333,
3.013333333, 2.9, 3.116666667, 3.343333333, 3.156666667, 3.066666667,
2.94, 3.1, 3.04, 3.033333333, 2.973333333, 3.02, 3.21)), class = "data.frame", row.names = c(NA,
-14L))
这就是我想要的:
Day Id Var Time
1 20180501-033-000001 3.156666667 Morning1
2 20180502-033-000001 2.986666667 Morning1
3 20180503-033-000001 3.073333333 Morning1
4 20180507-033-000001 3.236666667 Morning1
5 20180508-033-000001 3.03 Morning1
6 20180509-033-000001 3.01 Morning1
7 20180510-033-000001 2.916666667 Morning1
8 20180511-033-000001 3.293333333 Morning1
9 20180514-033-000001 3.136666667 Morning1
10 20180516-033-000001 3.116666667 Morning1
11 20180517-033-000003 2.843333333 Morning1
12 20180518-033-000001 3.033333333 Morning1
13 20180521-033-000002 3.173333333 Morning1
14 20180523-033-000001 3.336666667 Morning1
1 20180501-033-000002 2.866666667 Morning2
2 20180502-033-000002 2.93 Morning2
3 20180503-033-000002 3.07 Morning2
4 20180507-033-000002 2.99 Morning2
5 20180508-033-000002 3.15 Morning2
6 20180509-033-000002 3.02 Morning2
7 20180510-033-000002 3.103333333 Morning2
8 20180511-033-000002 3.163333333 Morning2
9 20180514-033-000002 3.186666667 Morning2
10 20180516-033-000002 3.283333333 Morning2
11 20180517-033-000004 3.12 Morning2
12 20180518-033-000002 3.29 Morning2
13 20180521-033-000003 2.993333333 Morning2
14 20180523-033-000002 3.026666667 Morning2
1 20180501-033-000008 2.946666667 Afternoon1
2 20180502-033-000020 3.076666667 Afternoon1
3 20180503-033-000011 3.106666667 Afternoon1
4 20180507-033-000015 3.043333333 Afternoon1
5 20180508-033-000015 3.156666667 Afternoon1
6 20180509-033-000007 3 Afternoon1
7 20180510-033-000007 3.336666667 Afternoon1
8 20180511-033-000013 2.98 Afternoon1
9 20180514-033-000007 2.766666667 Afternoon1
10 20180516-033-000008 3.133333333 Afternoon1
11 20180517-033-000008 3.06 Afternoon1
12 20180518-033-000007 3.006666667 Afternoon1
13 20180521-033-000008 2.983333333 Afternoon1
14 20180523-033-000007 3.3 Afternoon1
1 20180501-033-000009 3.133333333 Afternoon2
2 20180502-033-000021 3.013333333 Afternoon2
3 20180503-033-000012 2.9 Afternoon2
4 20180507-033-000016 3.116666667 Afternoon2
5 20180508-033-000017 3.343333333 Afternoon2
6 20180509-033-000008 3.156666667 Afternoon2
7 20180510-033-000008 3.066666667 Afternoon2
8 20180511-033-000014 2.94 Afternoon2
9 20180514-033-000008 3.1 Afternoon2
10 20180516-033-000009 3.04 Afternoon2
11 20180517-033-000009 3.033333333 Afternoon2
12 20180518-033-000008 2.973333333 Afternoon2
13 20180521-033-000009 3.02 Afternoon2
14 20180523-033-000008 3.21 Afternoon2
我想做从宽到长的转换,这样 Id 和 'Var' 的值每天都会堆积起来。我还想要一个名为“时间”的附加列,它取决于初始 ID,即“Morning_1_id”、“Morning_2_id”、“Afternoon_1_id”和“Afternoon_2_id”。这该怎么做?我尝试使用 reshape2 中的 melt 但无法完成。
解决方案
这是一个dplyr
用于将表格转换为请求格式的解决方案:
library(dplyr)
mydata<- reshape(mydata, direction='long',
varying=c('Morning_1_id', 'Var1', 'Morning_2_id', 'Var2', 'Afternoon_1_id', 'Var3', 'Afternoon_2_id', 'Var4'),
timevar='Var',
times=c('Morning1', 'Morning2', 'Afternoon1', 'Afternoon2'),
v.names=c('Id', 'Var'),
idvar='Day')
mydata<- tibble::rownames_to_column(mydata)
mydata$rowname<- gsub("^.*\\.","", mydata$rowname)
names(mydata)<- c("Time", "Day", "Var", "Id")
mydata<- mydata[,c(2,4,3,1)]
推荐阅读
- arrays - 如何处理 YAML 中给出的数组项以与 Go 中的结构关联?
- sql - SQL 条件求和 Oracle 更新
- oracle - DBA_AUTOTASK_SCHEDULE 不对?
- python - Python - 从 URL 读取图像然后用于 face_recognition?
- wordpress - 在 wp_users 表上添加新字段
- c# - 如何在实体框架 6 中将数字映射为双精度值?
- arrays - 未从 LocalStorage 中删除正确的索引项
- postgresql - 在 postgresql 中查找数据库中损坏的表
- python - 在python中重复列表N次?
- cakephp - CakePHP 3.8 - Cookie 删除