Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将多个列与Tidyr'组合;s通过引用相似的列名来联合_R_Tidyr_Tidyverse - Fatal编程技术网

将多个列与Tidyr'组合;s通过引用相似的列名来联合

将多个列与Tidyr'组合;s通过引用相似的列名来联合,r,tidyr,tidyverse,R,Tidyr,Tidyverse,下面是一个简单数据帧的代码。我有一些混乱的数据,这些数据是用列因子类别导出的,这些类别分布在不同的列中 library(tidyr) library(dplyr) library(tidyverse) Client像这样的东西?如果你有很多列 DF<-DF%>%unite(Sat,Satisfaction_Satisfied,Satisfaction_VerySatisfied,sep=" ")%>% unite(Sex,Sex_M,Sex_F,sep=" ") resul

下面是一个简单数据帧的代码。我有一些混乱的数据,这些数据是用列因子类别导出的,这些类别分布在不同的列中

library(tidyr)
library(dplyr)
library(tidyverse)

Client像这样的东西?如果你有很多列

DF<-DF%>%unite(Sat,Satisfaction_Satisfied,Satisfaction_VerySatisfied,sep=" ")%>%
unite(Sex,Sex_M,Sex_F,sep=" ")

result我们可以使用
unite

result<-with(new.env(),{
  Client<-c("Client1","Client2","Client3","Client4","Client5")
  Sex_M<-c("Male","NA","Male","NA","Male")
  Sex_F<-c(" ","Female"," ","Female"," ")
  Satisfaction_Satisfied<-c("Satisfied"," "," ","Satisfied","Satisfied")
  Satisfaction_VerySatisfied<-c(" ","VerySatisfied","VerySatisfied"," "," ")
  CommunicationType_Email<-c("Email"," "," ","Email","Email")
  CommunicationType_Phone<-c(" ","Phone ","Phone "," "," ")
  x<-ls()
  categories<-unique(sub("(.*)_(.*)", "\\1", x))
  df<-setNames(data.frame( lapply(x, function(y) get(y))), x)
  for(nm in categories){
    df<-unite_(df, nm, x[contains(vars = x, match = nm)])
  }
  return(df)
})

Client CommunicationType    Satisfaction       Sex
1 Client1           Email_      Satisfied_      _Male
2 Client2           _Phone   _VerySatisfied Female_NA
3 Client3           _Phone   _VerySatisfied     _Male
4 Client4           Email_      Satisfied_  Female_NA
5 Client5           Email_      Satisfied_      _Male

对于多个案例,也许是这样

library(tidyverse)
DF %>% 
    unite(Sat, matches("^Sat"))
gather(DF,Var,Val,-Client,na.rm=TRUE)%>%
分离(Var,分为=c(“Var1”、“Var2”))%>%
分组依据(客户,Var1)%>%
摘要(Val=paste(Val[!(is.na(Val)| Val==“”),collapse=“”)%>%
排列(Var1,Val)
#客户沟通类型满意度性别
#*                           
#1名客户1封邮件满意男性
#2个客户2个电话非常满意女性
#3个客户3个电话非常满意男性
#4位客户4封电子邮件满意女性
#5位客户5封邮件满意男性
DF%>%unite(Sat,包含(“Sat”))
DF%>%unite(Sat,匹配“^Sat”)
library(tidyverse)
DF %>% 
    unite(Sat, matches("^Sat"))
gather(DF, Var, Val, -Client, na.rm = TRUE) %>%
        separate(Var, into = c("Var1", "Var2")) %>%
        group_by(Client, Var1) %>% 
        summarise(Val = paste(Val[!(is.na(Val)|Val=="")], collapse="_")) %>%
        spread(Var1, Val)
#  Client CommunicationType  Satisfaction    Sex
#*   <chr>             <chr>         <chr>  <chr>
#1 Client1             Email     Satisfied   Male
#2 Client2             Phone VerySatisfied Female
#3 Client3             Phone VerySatisfied   Male
#4 Client4             Email     Satisfied Female
#5 Client5             Email     Satisfied   Male