R 将相同的值分散到多个列中
这是我的出发点R 将相同的值分散到多个列中,r,dataframe,dplyr,spread,R,Dataframe,Dplyr,Spread,这是我的出发点 test <- data.frame(ident = c(1,2,3,4,5), cult1 = c("CER", "CER", "CER", "INF", "INF"), cult2 = c("GEX", "GEX", "GEX", &
test <- data.frame(ident = c(1,2,3,4,5),
cult1 = c("CER", "CER", "CER", "INF", "INF"),
cult2 = c("GEX", "GEX", "GEX", "GEX", "GEX"),
cult3 = c(NA, "ORG", "ORG", NA, NA),
prod = c(11050,2134,0,26250,2124),
value = c(19785,34132,9207,6987,4455),
weight = c(0,0,56,13,556))
test%
排列(键=分类温度,value=“prod”)
测试%变异(分类温度=paste0(“V”,文化1))%>%
排列(键=分类温度,value=“value”)
测试%变异(分类温度=paste0(“W”,文化1))%>%
排列(键=分类温度,值=“重量”)
试验%变异(分类温度=paste0(“P”),试验2))%>%
排列(键=分类温度,value=“prod2”)
测试%变异(分类温度=paste0(“V_u2;”,cult2))%>%
排列(键=分类温度,value=“value2”)
测试%变异(分类温度=paste0(“W”,cult2))%>%
排列(键=分类温度,值=“权重2”)
测试%变异(分类温度=paste0(“P_”,3))%>%
排列(键=分类温度,value=“prod3”)
测试变异百分比(分类温度=paste0(“V_u3))%>%
排列(键=分类温度,value=“value3”)
测试%变异(分类温度=paste0(“W_u”,cult3))%>%
排列(键=分类温度,值=“权重3”)
#删除NA命名列
测试%select(-u以“NA”结尾)
有没有更有效的方法?
我没有pivot_功能,因为我运行的是旧的R版本
预期结果:
ident cult1 cult2 cult3 P_CER P_INF V_CER V_INF W_CER W_INF P_GEX V_GEX W_GEX P_ORG V_ORG W_ORG
1 1 CER GEX <NA> 11050 NA 19785 NA 0 NA 11050 19785 0 NA NA NA
2 2 CER GEX ORG 2134 NA 34132 NA 0 NA 2134 34132 0 2134 34132 0
3 3 CER GEX ORG 0 NA 9207 NA 56 NA 0 9207 56 0 9207 56
4 4 INF GEX <NA> NA 26250 NA 6987 NA 13 26250 6987 13 NA NA NA
5 5 INF GEX <NA> NA 2124 NA 4455 NA 556 2124 4455 556 NA NA NA
ident cult1 cult2 cult3 P_CER P_INF V_CER V_INF W_CER W_INF P_GEX V_GEX W_GEX P_ORG V_ORG W_ORG
1 CER GEX 11050 NA 19785 NA 0 NA 11050 19785 0 NA NA NA
2 CER GEX组织2134 NA 34132 NA 0 NA 2134 34132 0 2134 34132 0
3 CER GEX组织0 NA 9207 NA 56 NA 0 9207 56 0 9207 56
4 INF GEX NA 26250 NA 6987 NA 13 26250 6987 13 NA NA
5 INF GEX NA 2124 NA 4455 NA 556 2124 4455 556 NA NA NA
我不确定是否可以称之为更高效,但至少它是一个代码块:
test2 <- test %>%
gather(cult1:cult3, key = "key", value = "cult") %>%
mutate(prod_cult = paste0("P_",cult),
value_cult = paste0("V_",cult),
weight_cult = paste0("W_",cult)) %>%
spread(key = key, value = cult) %>%
spread(key = prod_cult, value = prod) %>%
spread(key = value_cult, value = value) %>%
spread(key = weight_cult, value = weight) %>%
group_by(ident) %>%
summarise_all(~first(na.omit(.))) %>%
select(-ends_with("NA"))
test2%
聚集(cult1:cult3,key=“key”,value=“cult”)%>%
突变(prod_cult=paste0(“P_”),cult,
value_cult=paste0(“V_u”,cult),
重量曲线=粘贴0(“W曲线”,曲线))%>%
排列(键=键,值=邪教)%>%
价差(键=产品,值=产品)%>%
排列(键=值,值=值)%>%
排列(键=重量,值=重量)%>%
分组人(识别号)%>%
总结所有内容(~首先(不适用)(省略)()%>%
选择(-u以“NA”结尾)
Thx,我认为它更有效。另外,我在聚集中添加了na.rm=T,因此我不需要删除创建的“na”列
test2 <- test %>%
gather(cult1:cult3, key = "key", value = "cult") %>%
mutate(prod_cult = paste0("P_",cult),
value_cult = paste0("V_",cult),
weight_cult = paste0("W_",cult)) %>%
spread(key = key, value = cult) %>%
spread(key = prod_cult, value = prod) %>%
spread(key = value_cult, value = value) %>%
spread(key = weight_cult, value = weight) %>%
group_by(ident) %>%
summarise_all(~first(na.omit(.))) %>%
select(-ends_with("NA"))