2017-02-21 10 views
0

у меня есть кадр данных, как этот:dcast данные, имеющие id.vars переменную с уровнями неравной длины

date_time   id  Temp 
2012-02-27 00:12:30 | Sens_1 | 25.2 
2012-02-27 00:13:00 | Sens_1 | 25.5 
2012-02-27 00:13:30 | Sens_1 | 26.3 
2012-02-27 00:14:00 | Sens_1 | 26.3 
2012-02-27 00:14:30 | Sens_1 | 26.3 
      :    :   : 
2012-02-27 00:12:30 | Sens_2 | 35.4 
2012-02-27 00:13:00 | Sens_2 | 36.5 
2012-02-27 00:13:30 | Sens_2 | 38.8 
2012-02-27 00:14:30 | Sens_2 | 36.3 
      :     :   : 
2012-02-27 00:12:30 | Sens_3 | 15.4 
2012-02-27 00:13:00 | Sens_3 | 15.5 
2012-02-27 00:13:30 | Sens_3 | 16.8 
2012-02-27 00:14:30 | Sens_3 | 16.3 
      :     :   : 

И я хочу, чтобы получить еще один кадр данных, который выглядит следующим образом:

 date_time   Sens_1 | Sens_2 | Sens_3 
2012-02-27 00:12:30 | 25.2 | 35.4 | 15.4 
2012-02-27 00:13:00 | 25.5 | 36.5 | 15.5 
2012-02-27 00:13:30 | 26.3 | 38.8 | 16.8 
2012-02-27 00:14:00 | 26.3 | NA  | NA 
2012-02-27 00:14:30 | 26.3 | 36.3 | 16.3 
      :    :   :   : 

Как я могу это достичь? Несмотря на то, что в куске df я поставил выше всех трех переменных, получивших одно и то же значение «date_time» (и, следовательно, это в большинстве случаев), есть определенные строки, где любая подгруппа переменных может иметь определенное значение «date_time» и остальное не будет.

+0

Вы можете использовать функцию распространения из dplyr. – thisisrg

ответ

0

Вот один вкладыш:

library('data.table') 
setDT(df1) # convert data frame to data table by reference 
dcast(df1, date_time ~ id, value.var = 'Temp', fun = function(x) x, fill = NA_real_) 
#    date_time Sens_1 Sens_2 Sens_3 
# 1: 2012-02-27 00:11:00 23.0 34.6 14.6 
# 2: 2012-02-27 00:11:30 23.4 33.4 14.4 
# 3: 2012-02-27 00:12:00 34.6  NA 13.6 
# 4: 2012-02-27 00:12:30 35.4  NA 15.4 
# 5: 2012-02-27 00:13:00 25.5 36.5 15.5 
# 6: 2012-02-27 00:13:30 26.3 38.8 16.8 

данных:

df1 <- structure(list(date_time = c("2012-02-27 00:11:00", "2012-02-27 00:11:30", 
            "2012-02-27 00:12:00", "2012-02-27 00:12:30", "2012-02-27 00:13:00", 
            "2012-02-27 00:13:30", "2012-02-27 00:11:00", "2012-02-27 00:11:30", 
            "2012-02-27 00:12:00", "2012-02-27 00:12:30", "2012-02-27 00:13:00", 
            "2012-02-27 00:13:30", "2012-02-27 00:11:00", "2012-02-27 00:11:30", 
            "2012-02-27 00:12:00", "2012-02-27 00:12:30", "2012-02-27 00:13:00", 
            "2012-02-27 00:13:30"), 
         id = c("Sens_1", "Sens_1", "Sens_1", "Sens_1", "Sens_1", "Sens_1", "Sens_2", "Sens_2", 
          "Sens_1", "Sens_1", "Sens_2", "Sens_2", "Sens_3", "Sens_3", "Sens_3", "Sens_3", 
          "Sens_3", "Sens_3"), 
         Temp = c(23, 23.4, 24.6, 25.2, 25.5, 26.3, 34.6, 33.4, 34.6, 35.4, 36.5, 38.8, 14.6, 
           14.4, 13.6, 15.4, 15.5, 16.8)), .Names = c("date_time", "id", "Temp"), 
       row.names = c(NA, -18L), class = "data.frame") 
+0

Спасибо за ответ @Sathish У меня все еще такая же проблема. Я, вероятно, не был достаточно конкретным, когда я впервые разместил вопрос, но я сомневаюсь в том, когда я получу значения в определенной строке, которые не будут измерены не всеми новыми столбцами, и поэтому каждая из них не будет иметь одинаковую длину, желание дает мне приходится перестраивать или создавать новый DataFrame. – NewUser

+0

Пожалуйста, отредактируйте ваш вопрос с сомнением. Я бы предложил изменить заголовок, например, «изменение данных с переменной« value.vars »с уровнями неравной длины». Я не знаю, добавит ли кто-нибудь вам существующий ответ и повторит его повторение. Это не успокаивается. Я опубликовал отредактированное решение. Взгляни, пожалуйста. – Sathish

+0

title как "данные dcast с переменной' id.vars' с уровнями неравной длины ". - более конкретно – Sathish

 Смежные вопросы

  • Нет связанных вопросов^_^