0
combine_cols<- function(primary,secondary,linker,column) {
require(data.table)
a<-data.table("Sample"=primary[,linker], primary[,column])
b<-data.table("Sample"=secondary[,linker], secondary[,column])
c <- merge(a, b, by = "Sample", all=TRUE)
c[,Status := ifelse(!is.na(c[,paste0(column,".x")]), paste0(column,".x"),
paste0(column,".y"))]
c[,`:=` (paste0(column,".x")=NULL, paste0(column,".y")= NULL)]
return(c)
}
mydata1<-data.frame("Sample"=c("100","101","102","103"),"Status"=c("Y","","","partial"))
mydata2<-data.frame("Sample"=c("100","101","102","103","106"),"Status"=c("NA","Y","","","Y"))
print((combine_cols(mydata1,mydata2,"Sample",c("Status"))))
でペーストを使用しました。 paste0(column,".x")
が文字として認識され、列名ではないため、ifelse
行が機能しません。 c[,paste0(column,".x")]
にc$c[,paste0(column,".x")]
が反映されるようにするにはどうすればよいですか?さらに、この行を変更して列名のリストを処理するにはどうすればよいですか?私は、分割データの列をマージする機能を作成しようとしているデータフレームの列コール
オブジェクトに名前を付けるときは、コードで使用されるcなどのR関数は使用しないでください。 –
可能なdupe:['data.table'で動的カラム名を使う](https://stackoverflow.com/q/14937165/903061) – Gregor