這是有點晚了,但我不相信你需要slice
和join
。只需調換你的數據,並使用原始數據的列名的Sensor
添加一列:
test_data <- data.frame(t(test_data), Sensor=colnames(test_data))
然後,您可以gather
。在這裏,我添加的列名的每個測量方便:
library(dplyr)
library(tidyr)
test_data %>% setNames(c("Radial", "Azimuth", paste0("M",1:(ncol(test_data)-3)), "Sensor")) %>%
gather("Measurement", "Temperature", M1:M10)
對於set.seed(123)
生成以下輸入:
test_data <- structure(list(T1 = c(0, 0, -0.560475646552213, -0.23017748948328,
1.55870831414912, NA, 0.070508391424576, 0.129287735160946, 1.71506498688328,
0.460916205989202, -1.26506123460653, -0.686852851893526), T2 = c(1,
0, NA, NA, -0.445661970099958, 1.22408179743946, 0.359813827057364,
0.400771450594052, 0.11068271594512, -0.555841134754075, 1.78691313680308,
0.497850478229239), T3 = c(0, 6.28318530717959, -1.96661715662964,
0.701355901563686, -0.472791407727934, -1.06782370598685, -0.217974914658295,
-1.02600444830724, -0.72889122929114, -0.625039267849257, -1.68669331074241,
NA), T4 = c(1, 6.28318530717959, 0.837787044494525, NA, 0.153373117836515,
-1.13813693701195, 1.25381492106993, 0.426464221476814, -0.295071482992271,
0.895125661045022, 0.878133487533042, 0.821581081637487)), .Names = c("T1",
"T2", "T3", "T4"), row.names = c(NA, -12L), class = "data.frame")
## T1 T2 T3 T4
##1 0.00000000 1.0000000 0.0000000 1.0000000
##2 0.00000000 0.0000000 6.2831853 6.2831853
##3 -0.56047565 NA -1.9666172 0.8377870
##4 -0.23017749 NA 0.7013559 NA
##5 1.55870831 -0.4456620 -0.4727914 0.1533731
##6 NA 1.2240818 -1.0678237 -1.1381369
##7 0.07050839 0.3598138 -0.2179749 1.2538149
##8 0.12928774 0.4007715 -1.0260044 0.4264642
##9 1.71506499 0.1106827 -0.7288912 -0.2950715
##10 0.46091621 -0.5558411 -0.6250393 0.8951257
##11 -1.26506123 1.7869131 -1.6866933 0.8781335
##12 -0.68685285 0.4978505 NA 0.8215811
你得到:
## Radial Azimuth Sensor Measurement Temperature
##1 0 0.000000 T1 M1 -0.56047565
##2 1 0.000000 T2 M1 NA
##3 0 6.283185 T3 M1 -1.96661716
##4 1 6.283185 T4 M1 0.83778704
##5 0 0.000000 T1 M2 -0.23017749
##6 1 0.000000 T2 M2 NA
##7 0 6.283185 T3 M2 0.70135590
##8 1 6.283185 T4 M2 NA
##9 0 0.000000 T1 M3 1.55870831
##10 1 0.000000 T2 M3 -0.44566197
##11 0 6.283185 T3 M3 -0.47279141
##12 1 6.283185 T4 M3 0.15337312
##13 0 0.000000 T1 M4 NA
##14 1 0.000000 T2 M4 1.22408180
##15 0 6.283185 T3 M4 -1.06782371
##16 1 6.283185 T4 M4 -1.13813694
##17 0 0.000000 T1 M5 0.07050839
##18 1 0.000000 T2 M5 0.35981383
##19 0 6.283185 T3 M5 -0.21797491
##20 1 6.283185 T4 M5 1.25381492
##21 0 0.000000 T1 M6 0.12928774
##22 1 0.000000 T2 M6 0.40077145
##23 0 6.283185 T3 M6 -1.02600445
##24 1 6.283185 T4 M6 0.42646422
##25 0 0.000000 T1 M7 1.71506499
##26 1 0.000000 T2 M7 0.11068272
##27 0 6.283185 T3 M7 -0.72889123
##28 1 6.283185 T4 M7 -0.29507148
##29 0 0.000000 T1 M8 0.46091621
##30 1 0.000000 T2 M8 -0.55584113
##31 0 6.283185 T3 M8 -0.62503927
##32 1 6.283185 T4 M8 0.89512566
##33 0 0.000000 T1 M9 -1.26506123
##34 1 0.000000 T2 M9 1.78691314
##35 0 6.283185 T3 M9 -1.68669331
##36 1 6.283185 T4 M9 0.87813349
##37 0 0.000000 T1 M10 -0.68685285
##38 1 0.000000 T2 M10 0.49785048
##39 0 6.283185 T3 M10 NA
##40 1 6.283185 T4 M10 0.82158108
嘿嘿,真好!但我認爲創建一個額外的數據框然後加入是不必要的。那麼'test_data_tidy < - test_data%>%group_by(Sensor)%>%mutate(r = Temperature [1],theta = Temperature [2])%>%slice(3:nrow(。))''?謝謝你教我「片」,我不知道這一點。 – DeltaIV
@DeltaIV Yup這也是一種有效的方法。也許使用'.. r = first(溫度),θ= n(溫度,2)'更加習慣。 –