假设我创建了一个具有以下格式的数据框:
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和/或
答案 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
是自我解释的。