从长到宽格式,字符值在 r
Long to wide format with character value in r
我有一个长数据框如下:
Date Time Type
1 1 A
1 2 B
1 3 C
2 2 C
2 3 D
2 5 A
2 7 E
我想将其更改为宽格式,如下所示:
Date Time1 Time2 Time3 Time4 Time5 Time6 Time7
1 A B C
2 C D A E
我使用了以下代码,但它只给我 0 和 1 值而不是 'Type' 值:
df_index = ddply(df, .(Date), mutate, index = paste0('Time', 1:length(Date)))
df2 = dcast(df_index, Date ~ index, value.var = 'Type')
你能帮我一下吗?
您可以使用 tidyr(您应该研究的神奇 tidyverse 的一部分)相当轻松地完成此操作。
install.packages('tidyr')
install.packages('dplyr')
library(tidyr)
library(dplyr)
all_times <- data.frame(Time = c(1:6))
df <- data.frame(Date = c(1, 1, 1, 2, 2, 2, 2), Time = c(1, 2, 3, 2, 3, 5, 7),Type = c('A', 'B', 'C', 'C', 'D', 'A', 'E'))
spread_df <- df %>% right_join(all_times) %>% spread(Time, Type, sep = '.') %>% filter(!is.na(Date))
根据 PoGibas 的评论编辑
我有一个长数据框如下:
Date Time Type
1 1 A
1 2 B
1 3 C
2 2 C
2 3 D
2 5 A
2 7 E
我想将其更改为宽格式,如下所示:
Date Time1 Time2 Time3 Time4 Time5 Time6 Time7
1 A B C
2 C D A E
我使用了以下代码,但它只给我 0 和 1 值而不是 'Type' 值:
df_index = ddply(df, .(Date), mutate, index = paste0('Time', 1:length(Date)))
df2 = dcast(df_index, Date ~ index, value.var = 'Type')
你能帮我一下吗?
您可以使用 tidyr(您应该研究的神奇 tidyverse 的一部分)相当轻松地完成此操作。
install.packages('tidyr')
install.packages('dplyr')
library(tidyr)
library(dplyr)
all_times <- data.frame(Time = c(1:6))
df <- data.frame(Date = c(1, 1, 1, 2, 2, 2, 2), Time = c(1, 2, 3, 2, 3, 5, 7),Type = c('A', 'B', 'C', 'C', 'D', 'A', 'E'))
spread_df <- df %>% right_join(all_times) %>% spread(Time, Type, sep = '.') %>% filter(!is.na(Date))
根据 PoGibas 的评论编辑