[R] merging columns
Matthew Dowle
mdowle at mdowle.plus.com
Wed Feb 3 10:27:35 CET 2010
Yes.
data.df[,wcol,drop=FALSE]
For an explanation of drop see ?"[.data.frame"
"Chuck White" <chuckwhite8 at charter.net> wrote in message
news:20100202212800.O8XBU.681696.root at mp11...
> Additional clarification: the problem only comes when you have one column
> selected from the original dataframe. You need to make the following
> modification to the original example:
>
> data.df <- data.frame(aa=c(1,1,0), cc=c(1,0,0), aab=c(0,1,0),
> aac=c(0,0,1), bb=c(1,0,1))
>
> And, the following seems to work:
> data.frame(sapply(col2.uniq, function(col) {
> wcol <- which(col==col2)
> as.numeric(rowSums(data.frame(data.df[,wcol]))>0)
> }))
> I had to wrap data.df[,wcol] in another data.frame to handle situations
> where wcol had one element. Is there a better approach?
>
>
> ---- Chuck White <chuckwhite8 at charter.net> wrote:
>> Hello -- I am trying to merge columns in a dataframe based on substring
>> matches in colnames. I would appreciate if somebody can suggest a
>> faster/cleaner approach (eg. I would have really liked to avoid the
>> if-else piece but rowSums does not like that). Thanks.
>>
>> data.df <- data.frame(aa=c(1,1,0), bbcc=c(1,0,0), aab=c(0,1,0),
>> aac=c(0,0,1), bbk=c(1,0,1))
>> col2 <- substr(colnames(data.df),1,2)
>>
>> col2.uniq <- unique(col2)
>> names(col2.uniq) <- col2.uniq
>>
>> data.frame(sapply(col2.uniq, function(col) {
>> wcol <- which(col==col2)
>> if(length(wcol)>1) {
>> tmp <- rowSums(data.df[,wcol])
>> } else {
>> tmp <- data.df[,wcol]
>> }
>> as.numeric(tmp>0)
>> }))
>
More information about the R-help
mailing list