I have a table with 3 columns ID, clinical condition 1 and clinical condition 2. The table is shown below
ID clinical condition 1 clinical condition 2
2345 depression dementia
2346 Tuberculosis
2347 cancer
2348 Flu dementia
I would like to make the following transformed table using base R
ID clinical condition 1
2345 depression
2345 dementia
2346 Tuberculosis
2347 cancer
2348 Flu
2348 dementia
Can someone please help me solve this problem?
in base R:
subset(cbind(df[1], stack(df[-1])[-2]), nzchar(values))
ID values
1 2345 depression
2 2346 Tuberculosis
3 2347 cancer
4 2348 Flu
5 2345 dementia
8 2348 dementia
subset(reshape(df, list(2:3), dir="long"), nzchar(clinical_condition_1))
ID time clinical_condition_1 id
1.1 2345 1 depression 1
2.1 2346 1 Tuberculosis 2
3.1 2347 1 cancer 3
4.1 2348 1 Flu 4
1.2 2345 2 dementia 1
4.2 2348 2 dementia 4
in Tidyverse:
library(tidyverse)
df %>%
pivot_longer(-ID)%>%
filter(nzchar(value))
# A tibble: 6 × 3
ID name value
<int> <chr> <chr>
1 2345 clinical_condition_1 depression
2 2345 clinical_condition_2 dementia
3 2346 clinical_condition_1 Tuberculosis
4 2347 clinical_condition_1 cancer
5 2348 clinical_condition_1 Flu
6 2348 clinical_condition_2 dementia
df <- structure(list(ID = 2345:2348, clinical_condition_1 = c("depression",
"Tuberculosis", "cancer", "Flu"), clinical_condition_2 = c("dementia",
"", "", "dementia")), class = "data.frame", row.names = c(NA,
-4L))