如何在数据框中转置一列,使其他所有内容保持不变

时间:2019-03-27 13:44:42

标签: r data-manipulation

我正在设置数据框进行分析。但是,这是我第一次需要条件转置。

我有一个如下数据框:

syms x1 x2
fct(x1,x2)=x1^2-x2^2+8*x1*x2-x2^4+1;
grad=gradient(f);
grad1=@(x1,x2) [eval(grad(1,1));eval(grad(2,1))];
x=[3;3];
epsilon=0.01;
%%
c=stepfix(fct,grad1,x,epsilon)

我要拆分Booking_date列,以便每个人或每条记录有两个预订日期 F_Name L_Name id Booking_date flag 1 Alon Trecker 1 10/16/2018 A 2 Alon Trecker 1 1/15/2019 B 3 Tenzing Omaho 2 8/29/2018 A 4 Tenzing Omaho 2 12/26/2018 A 5 Sheryl Stark NA 11/20/2018 A Booking_date1,其中第一列的值将是`Booking_date的第一个日期该人的´列,第二个则是第二个条目。但是,如果此人没有第二次输入,我可以在Booking_date2列中为他保留NA值。

类似这样的东西

Booking_date2

我尝试使用F_Name L_Name id Booking_date1 Booking_date2 flag1 flag2 Alon Trecker 1 10/16/2018 1/15/2019 A B Tenzing Omaho 2 8/29/2018 12/26/2018 A A Sheryl Stark NA 11/20/2018 NA A NA melt,但我不知道要使用它。如果有人可以帮助我,那就太好了。

2 个答案:

答案 0 :(得分:0)

library(data.table)
setDT(df)
df[, date_id := 1:.N, by = .(id)]
dcast(df, ... ~ date_id, value.var = c("Booking_date", "flag"))
#     F_Name  L_Name id Booking_date_1 Booking_date_2 flag_1 flag_2
# 1:    Alon Trecker  1     10/16/2018      1/15/2019      A      B
# 2:  Sheryl   Stark NA     11/20/2018           <NA>      A   <NA>
# 3: Tenzing   Omaho  2      8/29/2018     12/26/2018      A      A

答案 1 :(得分:0)

要完成Cettt的答案,必须删除列标志才能使每人只有一行。此外,您应该将预订日期转换为日期时间类变量(ymd包的lubridate函数),以确保保留预订日期的顺序

library(dplyr)
library(lubridate)
library(tidyr)
myadta %>% 
  group_by(F_Name, L_Name) %>% 
  mutate(Booking_date = mdy(Booking_date),
         Booking_id = paste0("Booking_date", row_number(Booking_date))) %>% 
  select(-flag) %>% 
  spread(Booking_id, Booking_date)