Как разбить один столбец с повторяющейся темой во фрейме данных в R? - PullRequest
0 голосов
/ 30 января 2020

У меня есть фрейм данных с одним столбцом, как показано ниже:

Name
Place
Location
Time
Context
Name
Place
Location
Time
Context

как конвертировать то же самое, чтобы каждая тема (например, для имени) стала отдельным столбцом:

Name Place Location Time Context

Name Place Location Time Context

Просто, чтобы объяснить лучше, у меня есть колонка с отдельными темами с 5 строками, а затем она повторяется.

Как конвертировать одно и то же в несколько столбцов с каждой уникальной темой?

Спасибо

Ответы [ 2 ]

0 голосов
/ 30 января 2020

Если я создаю фрейм данных с одним столбцом под названием «переменные»:

variables <- c("Name", "Place", "Location", "Time", "Context", "Name", "Place" ,"Location","Time", "Context")
my_df <- as.data.frame(variables)

Я могу получить все уникальные элементы этого вектора через уникальные (my_df $ variable), а затем добавить их в al oop как дополнительный столбец, содержащий значения NA (которые впоследствии могут быть заменены)

columns <- as.character(unique(my_df$variables))
for(i in 1:length(columns)){
  my_df[columns[i]] = NA
}


    > my_df
   variables Name Place Location Time Context
1       Name   NA    NA       NA   NA      NA
2      Place   NA    NA       NA   NA      NA
3   Location   NA    NA       NA   NA      NA
4       Time   NA    NA       NA   NA      NA
5    Context   NA    NA       NA   NA      NA
6       Name   NA    NA       NA   NA      NA
7      Place   NA    NA       NA   NA      NA
8   Location   NA    NA       NA   NA      NA
9       Time   NA    NA       NA   NA      NA
10   Context   NA    NA       NA   NA      NA
0 голосов
/ 30 января 2020

Это то, что вы ищете?

# packages
library(tidyr)
library(dplyr)

# create data
name<- c("Anna", "Berta", "Caesar", "Dora")
place <- c("AA", "BB", "CC", "DD")
location <-c("school", "work", "restaurant", "school")
time<-c(08.10, 08.30, 09.00, 10.15)
context<- c("a", "b", "a", "b")

dat<-as.data.frame(cbind(name, place, location, time, context))

dat_long<- dat %>%
  pivot_longer(c(1:5), names_to = "Variable", values_to = "Value")

# backtransform long data frame into wide data frame
dat_wide<- dat_long %>%
  group_by(Variable) %>%  # group by everything other than the value column 
  mutate(row_id=1:n()) %>% ungroup() %>%  # build group index
  pivot_wider(names_from = "Variable", values_from = "Value") %>%  # spread
  select(-row_id) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...