Разделение данных по уникальным значениям столбца - PullRequest
0 голосов
/ 14 июня 2019

Отредактируйте, чтобы прояснить проблему: я начинаю с грязного CSV-файла, поэтому мне нужно определить, какой это идентификатор и какая переменная времени. Или присвойте идентификатор и время данным в столбцах переменных. На этот вопрос теперь ответили ниже. Вот мои данные:

col1<-c("ID", "Date","var1","var2","ID","Date","var1","var2","ID","Date","var1","var2")
col2<-c("1","21-11-2015 14:20", "4.8","3.8", "1","21-11-2015 15:30", "3.5","5.9","2","21-11-2015 14:20","3.0","6.7")
df<-cbind(col1,col2)

Я пытался с dcast() без удачи:

dcast(ID+Date~var1+var2, data = df, value.var = col1 )

Я бы хотел, чтобы вывод был действительно длинным форматом, подобным этому:

ID<-c(1,1,2)
Date<-c("21-11-2015 14:20","21-11-2015 15:30","21-11-2015 14:20")
var1<-c("4.8","3.5","6.7")
var2<-c("3.8","5.9","3.0")
df.clean<-cbind(ID,Date, var1,var2)

Я ценю вашу помощь.

Ответы [ 3 ]

5 голосов
/ 14 июня 2019

Не думайте, что это вопрос изменения формы, у вас есть значения в одном столбце и имена в другом, которые можно собрать вместе и дать имена, используя setNames

with(df, setNames(data.frame(matrix(col2,
          ncol = length(unique(col1)), byrow = TRUE)), unique(col1)))

#  ID             Date var1 var2
#1  1 21-11-2015 14:20  4.8  3.8
#2  1 21-11-2015 15:30  3.5  5.9
#3  2 21-11-2015 14:20  3.0  6.7

Данные

col1<-c("ID", "Date","var1","var2","ID","Date","var1","var2","ID",
        "Date","var1","var2")
col2<-c("1","21-11-2015 14:20", "4.8","3.8", "1","21-11-2015 15:30", 
         "3.5","5.9","2","21-11-2015 14:20","3.0","6.7")
df<- data.frame(col1,col2)
1 голос
/ 14 июня 2019

Вот подход tidyverse:

library(tidyverse)

df %>%                                # your original (cbind) object
  data.frame() %>%                    # set as dataframe
  group_by(col1) %>%                  # for each col1 value
  mutate(index = row_number()) %>%    # set a row index (useful for reshaping)
  spread(col1, col2) %>%              # reshape
  select(-index)                      # remove index

# # A tibble: 3 x 4
#   Date             ID    var1  var2 
#   <fct>            <fct> <fct> <fct>
# 1 21-11-2015 14:20 1     4.8   3.8  
# 2 21-11-2015 15:30 1     3.5   5.9  
# 3 21-11-2015 14:20 2     3.0   6.7 
1 голос
/ 14 июня 2019

Это не вопрос изменения формы.Здесь я предоставляю простой код о том, как сделать это вручную:

Данные

col1<-c("ID", 
        "Date","var1","var2","ID","Date","var1","var2","ID","Date","var1","var2")
col2<-c("1","21-11-2015 14:20", "4.8","3.8", "1","21-11-2015 15:30", 
        "3.5","5.9","2","21-11-2015 14:20","3.0","6.7")
df<-data.frame(col1,col2, stringsAsFactors = F)

Код

uniquevars<-unique(col1)
Res<-list()
for(i in 1:length(uniquevars)){
  Res[[uniquevars[i]]]<-df[,"col2"][which(df[,"col1"] ==uniquevars[i])]
}

dfRes <- data.frame(matrix(unlist(Res), ncol=length(Res)),stringsAsFactors=FALSE)
colnames(dfRes)<-uniquevars
dfRes
      ID             Date var1 var2
    1  1 21-11-2015 14:20  4.8  3.8
    2  1 21-11-2015 15:30  3.5  5.9
    3  2 21-11-2015 14:20  3.0  6.7

Я надеюсь, что этот код поможет вам понять, что делать, если вы заинтересованы в этом.

Приветствия!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...