在R中按列和按行拆分Dataframe

时间:2017-11-23 11:22:53

标签: r

我有一个如下所示的数据框:

 P   sample    sensor1    sensor2    sensor3........sensorP
 a   1         2.45       3.56       2.345          2.33
 a   2         2.37       3.46       2.22           1.98
 a   3         2.78       3.22       1.45           2.67
 a   N

我希望它看起来像这样:

P  1_sensor1   2_sensor1   3_sensor1......N_sensorn1    2_sensor1    2_sensor2    
a  2.45        2.37        2.78                         3.56         3.46

等...... 因此,水平分割传感器并将样品分散在每个水平范围内。 我知道它是一个reshape2解决方案 - 我只是无法获得语法。 传感器将有不同的名称,样本长度也可能不同......因此N。

保罗。

1 个答案:

答案 0 :(得分:0)

您可以尝试使用tidyverse包。像这样:

library(tidyverse)
data <- data.frame(sample = 1:4,
               sensor1 = rnorm(4, 2), 
               sensor2 = rnorm(4, 2), 
               sensor3 = rnorm(4, 2), 
               sensor4 = rnorm(4, 2))
data %>% 
  gather(sensor, value, sensor1:sensor4) %>%
  unite(names, sample, sensor) %>%
  spread(names, value)

结果就像你在寻找:

  1_sensor1 1_sensor2 1_sensor3 1_sensor4 2_sensor1 2_sensor2 2_sensor3 2_sensor4
[1]  1.549545  3.166664 0.9557496  2.745318  2.246499  2.597675  3.352947  3.085531
  3_sensor1 3_sensor2 3_sensor3 3_sensor4 4_sensor1 4_sensor2 4_sensor3 4_sensor4
[1]  1.879149   3.82827   3.84254  3.052806  1.529147 0.6595416  1.286521  2.302484