R сворачивает несколько строк в одну строку, группируя несколько столбцов - PullRequest
1 голос
/ 08 октября 2019

Я хотел бы свернуть несколько строк в одну строку, группируя несколько столбцов, а не другие столбцы. У меня есть NA в столбцах, не используемых для группировки. После попытки нескольких решений полученная таблица заполняется значениями NA и не имеет значений. Я могу заставить решения работать, но только если я сделаю is.na = 0. Я бы не хотел вводить 0 в фрейм данных, потому что некоторые результаты измерений равны нулю.

Это продолжение R сворачивает несколько строк в 1 строку - те же столбцы Я попытался все рекомендованные решения, и результаты данных NA

TreatName<-c('Static','Static','Dynamic', 'Static')
id<-c('patient1','patient1','patient2','patient2')
Method<-c('IV', 'IV', 'IV', 'IV')
drug1<-as.numeric(c(34,'','',''))
drug2<-as.numeric(c('',7,'',''))
drug3<-as.numeric(c('','',56, 0))
df<-data.frame(TreatName, id, Method, drug1, drug2, drug3)

library(plyr)
groupColumns = c("TreatName","id", "Method")
dataColumns = c( "drug1", "drug2","drug3")
df1<-ddply(df, groupColumns, function(x) colSums(x[dataColumns]))


The expected result should be 
TreatName   id  Method  drug1   drug2   drug3
Static  patient1    IV  34  7   NA
Dynamic patient2    IV  NA  NA  56
Static  patient2    IV  NA  NA  0

The actual results are
TreatName   id  Method  drug1   drug2   drug3
Dynamic patient2    IV  NA  NA  56
Static  patient1    IV  NA  NA  NA
Static  patient2    IV  NA  NA  0

I noticed if I change the na to zero
df[is.na(df)]<-0
then use the ddply function it works.  But now I introduced zero when no measurement was taken.

Open to any solutions

1 Ответ

1 голос
/ 08 октября 2019

Вот один вариант с dplyr

library(dplyr)
df %>% 
   group_by_at(groupColumns) %>%
   summarise_at(vars(dataColumns),  ~ if(all(is.na(.))) NA_real_ 
         else na.omit(.))
# A tibble: 3 x 6
# Groups:   TreatName, id [3]
#  TreatName id       Method drug1 drug2 drug3
#  <fct>     <fct>    <fct>  <dbl> <dbl> <dbl>
#1 Dynamic   patient2 IV        NA    NA    56
#2 Static    patient1 IV        34     7    NA
#3 Static    patient2 IV        NA    NA     0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...