I have the following data frame:
ID T1 T2
a no no
a no yes
a no yes
b no no
b yes no
If there is a yes for the column for the same ID then I want to write "yes" in another column, if there is never a "yes" for the same ID then I just want a "no" in the new data frame. So I want to create the following data frame:
ID T1 T2
a no yes
b yes no
So far I have this:
for ( i in 1:end){
sameCol=TRUE
for (j in 1:end2){
subID = table[j,1]
if (table[j,i]=="yes"){
if (table[j,1]==table[j-1,1]){
isSAME=TRUE
}
isyes=TRUE
}
if((isyes==TRUE) & (isSAME==TRUE){
table2[j,i]="yes"
} else {
table2[j,i]="no"
}
}
}
But my code unfortunately doesn't work, what am I doing wrong?
CodePudding user response:
In R
, for
loops usually have easier alternatives.
With the library dplyr
, you can summarise the data by group using group_by
and summarise
. Here, you want to have "yes"
in the column if there is at least one "yes"
in the column, otherwise "no"
. Use across
to perform this across multiple columns.
library(dplyr)
df %>%
group_by(ID) %>%
summarise(across(T1:T2, ~ ifelse(any(.x == "yes"), "yes", "no")))
# A tibble: 2 x 3
ID T1 T2
<chr> <chr> <chr>
1 a no yes
2 b yes no
CodePudding user response:
df %>% group_by(ID) %>% summarize_all(max)
Output:
ID T1 T2
<chr> <chr> <chr>
1 a no yes
2 b yes no