【发布时间】:2019-11-28 15:03:39
【问题描述】:
我有一个长数据集,看起来像这样
ID <- c("A","A","A","A","A","A","A","A","A","B","B","B","B","B","B","B","B","B","B")
Year <- c(1,2,3,4,5,6,7,8,9,
1,2,3,4,4,5,6,7,8,9)
treatID <- c(NA,NA,NA,"CCQ_A",NA,NA,"CCQ_C",NA,NA,
NA,"CCQ+A",NA,"IOT+B","CCQ_K",NA,NA,"IOT_B",NA,NA)
SecondID <- c(NA,NA,NA,"CCQ",NA,NA,"CCQ",NA,NA,
NA,"CCQ",NA,"IOT","CCQ",NA,NA,"IOT",NA,NA)
cond <- c(NA,NA,NA,0,NA,NA,0,NA,NA,
NA,1,NA,1,1,NA,NA,1,NA,NA)
val <- c(NA,NA,NA,3,NA,NA,2,NA,NA,
NA,3,NA,4,5,NA,NA,1,NA,NA)
df <- data.frame(ID,Year,treatID,SecondID,cond, val)
按ID分组,我想根据以下条件创建一个宽数据集:
1) 如果cond!=1 数据应该基于变量treatID 进行传播,(并包括val 分数)
2) 如果cond==1 数据应该基于变量SecondID 进行传播(并包括val 分数)
最终的数据集应该是这样的
ID <- c("A","A","A","A","A","A","A","A","A","B","B","B","B","B","B","B","B","B")
Year <- c(1,2,3,4,5,6,7,8,9,
1,2,3,4,5,6,7,8,9)
CCQ_A <- c(NA,NA,NA,3,NA,NA,NA,NA,NA,
NA,NA,NA,NA,NA,NA,NA,NA,NA)
CCQ_C <- c(NA,NA,NA,NA,NA,NA,2,NA,NA,
NA,NA,NA,NA,NA,NA,NA,NA,NA)
S_ID_CCQ <-c(NA,NA,NA,NA,NA,NA,NA,NA,NA,
NA,3,NA,NA,5,NA,NA,NA,NA)
S_ID_IOT <-c(NA,NA,NA,NA,NA,NA,NA,NA,NA,
NA,NA,NA,4,NA,NA,NA,1,NA)
final <- data.frame(ID,Year,CCQ_A,CCQ_C,S_ID_CCQ, S_ID_IOT)
请不要添加S_ID 来识别哪些列一直在使用SecondID 变量进行分类
我可以在一个条件wide<- df %>% group_by(ID) %>% spread (treatID, val) 下进行传播,但我不确定如何处理多个条件。
另外,请注意,当涉及到 Year 和 ID 标识符时,df 包含一些重复的观察结果(即 ID=B 和 Year=4 有两行),而最终数据集只有一个观察结果ID=B 和 Year=4。这不是这个问题的基本要素,但如果你也能帮助我,那就太好了
我希望这很清楚
非常感谢您的帮助
【问题讨论】:
标签: r data-manipulation