我正在设置数据框进行分析。但是,这是我第一次需要条件转置。
我有一个如下数据框:
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
,但我不知道要使用它。如果有人可以帮助我,那就太好了。
答案 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)