【问题标题】:Splitting a Dataframe by columns and by row in R [duplicate]在R中按列和按行拆分数据框[重复]
【发布时间】:2018-05-07 08:27:24
【问题描述】:

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

 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.

保罗。

【问题讨论】:

  • 不是我真的想用多个样本分割多个列,这个例子没有这样做
  • 它就是这样做的;您的列P 类似于他们的列ID,您的列sample 类似于TIMEsensor1X,以及sensor2Y;它准确地转化为你正在做的事情。假设您的数据框名为 df,只需尝试以下操作:dcast(melt(df, id.vars=c("P", "sample")), P~variable+sample) - 这是链接重复问题的解决方案 - 您会明白我的意思。
  • 好的 - 我已经纠正了,它完全符合我的需要......!感谢您花时间重新解释。

标签: r


【解决方案1】:

您可以尝试使用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

【讨论】:

    猜你喜欢
    • 2016-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多