R中具有未知变量的多条件函数

时间:2018-03-19 14:02:15

标签: r function

假设我创建了一个具有以下格式的数据框:

matriz<-matrix(1:12,3,4)
as.data.frame(matriz)
colnames(matriz)<-c("Object A","Object B","Var1","Var2")

 Object A Object B Var1 Var2
   1          4      7   10
   2          5      8   11
   3          6      9   12

现在,应用以下“功能”,我想要以下结果:

功能:

filter_and_add<-function(x,var1,var2,...) {
y<-data.frame()
id1<-colnames(x)[1]
id2<-colnames(x)[2]
var1<-c(var1)
var2<-c(var2)
y1<-melt(x,id=c(id1,id2),measure.vars=c(var1))
y2<-melt(x,id=c(id1,id2),measure.vars=c(var2))
y<-rbind(y1,y2,...)
y
}

结果:

 Object A Object B Variable Value 
   1          4      Var1     7
   2          5      Var1     8
   3          6      Var1     9
   1          4      Var2     10
   2          5      Var2     11
   3          6      Var2     12
   .          .      Varx     z
   .          .      Varx     z
   .          .      Varx     z

Obs。:我不想要,函数“filter _and_add”上需要var2和/或

1 个答案:

答案 0 :(得分:0)

你可以这样做:

df %>% 
    gather(Variable, Value, -ObjectA, -ObjectB) %>% 
    filter(Variable == 'Var1') # or filter(str_detect(Variable, 'Var1'))

  ObjectA ObjectB Variable Value
1       1       4     Var1     7
2       2       5     Var1     8
3       3       6     Var1     9

说明:
1. gather将数据帧转换为长格式。 - 登录收集说不选择ObjectA和ObjectB将它们转换为长格式。
2. filter是自我解释的。