0
votes

I'm trying to use dplyr's mutate() and filter() to create a new column that tells me what is the sex of each sample participant. The sexes of the donors are as follows: D1:3 and D8 are female, and D4:D7 are male. I want to have a new column that just says "Male" or "Female" for each row accordingly. Will someone please help me figure out what went wrong?

df_sex_comparisons <- mutate(df, Sex = c(filter(df$Donor = D1:D3, D8) == "Female", filter(df$Donor = D4:D7) == "Male"))

My dataframe is below:

structure(list(Sample = c(1, 2, 3, 4, 5, 6, 43, 46, 47, 83, 84, 
    86, 87, 125, 126, 127, 129, 165, 167, 168, 169, 170, 206, 207, 
    209, 210, 211, 247, 248, 249, 251, 252, 288, 289, 290, 291, 293, 
    329, 330, 331, 332, 333, 370, 371, 372, 373, 374, 375, 411, 412, 
    413, 414, 415, 416, 452, 453, 454, 455, 456, 457, 493, 494, 495, 
    497, 498, 534, 535, 536, 537, 538, 539, 575, 576, 577, 578, 579, 
    580, 616, 618, 619, 620, 621, 657, 658, 659, 660, 662, 698, 699, 
    700, 701, 702, 703, 739, 740, 741, 742, 743, 744, 780, 781, 782, 
    783, 784, 785, 821, 822, 823, 824, 825, 826, 862, 863, 864, 865, 
    866, 867, 905, 906, 907, 908, 944, 945, 947, 948, 985, 986, 987, 
    988, 990, 1026, 1027, 1028, 1029, 1030, 1031, 1067, 1068, 1069, 
    1070, 1071, 1072, 1108, 1109, 1110, 1111, 1112, 1113, 1149, 1150, 
    1151, 1152, 1153, 1154, 1190, 1192, 1193, 1194, 1195, 1231, 1232, 
    1233, 1234, 1236, 1272, 1273, 1274, 1275, 1276, 1277, 1313, 1314, 
    1315, 1316, 1317, 1318, 1354, 1355, 1357, 1358, 1359, 1395, 1396, 
    1397, 1398, 1399, 1400, 1436, 1437, 1438, 1439, 1440, 1441, 1477, 
    1478, 1479, 1480, 1481, 1482, 1518, 1519, 1520, 1521, 1522, 1523, 
    1559, 1560, 1561, 1562, 1563, 1564, 1600, 1601, 1602, 1603, 1604, 
    1605, 1641, 1642, 1643, 1644, 1645, 1646, 1682, 1683, 1684, 1685, 
    1686, 1687, 1723, 1724, 1725, 1726, 1727, 1728, 1764, 1767, 1768, 
    1769, 1806, 1807, 1846, 1848, 1849, 1850, 1887, 1888, 1890, 1891, 
    1892, 1928, 1929, 1930, 1932, 1933, 1969, 1970, 1971, 1972, 1974, 
    2010, 2011, 2012, 2013, 2014, 2051, 2052, 2053, 2054, 2055, 2056, 
    2092, 2093, 2094, 2095, 2096, 2097, 2133, 2134, 2135, 2136, 2137, 
    2138, 2174, 2175, 2176, 2177, 2178, 2179, 2215, 2217, 2218, 2219, 
    2220, 2256, 2257, 2258, 2259, 2260, 2297, 2298, 2299, 2300, 2301, 
    2302, 2338, 2340, 2341, 2342, 2343, 2379, 2380, 2381, 2382, 2384, 
    2420, 2421, 2422, 2423, 2424, 2425, 2461, 2462, 2463, 2464, 2465, 
    2466, 2502, 2503, 2504, 2505, 2506, 2507, 2543, 2544, 2545, 2546, 
    2547, 2548, 2584, 2585, 2586, 2587, 2588, 2589), Drug = c("Ab1", 
    "Ab2", "Ab3", "Ab4", "Ab5", "Ab6", "Ab2", "Ab5", "Ab6", "Ab1", 
    "Ab2", "Ab4", "Ab5", "Ab2", "Ab3", "Ab4", "Ab6", "Ab1", "Ab3", 
    "Ab4", "Ab5", "Ab6", "Ab1", "Ab2", "Ab4", "Ab5", "Ab6", "Ab1", 
    "Ab2", "Ab3", "Ab5", "Ab6", "Ab1", "Ab2", "Ab3", "Ab4", "Ab6", 
    "Ab1", "Ab2", "Ab3", "Ab4", "Ab5", "Ab1", "Ab2", "Ab3", "Ab4", 
    "Ab5", "Ab6", "Ab1", "Ab2", "Ab3", "Ab4", "Ab5", "Ab6", "Ab1", 
    "Ab2", "Ab3", "Ab4", "Ab5", "Ab6", "Ab1", "Ab2", "Ab3", "Ab5", 
    "Ab6", "Ab1", "Ab2", "Ab3", "Ab4", "Ab5", "Ab6", "Ab1", "Ab2", 
    "Ab3", "Ab4", "Ab5", "Ab6", "Ab1", "Ab3", "Ab4", "Ab5", "Ab6", 
    "Ab1", "Ab2", "Ab3", "Ab4", "Ab6", "Ab1", "Ab2", "Ab3", "Ab4", 
    "Ab5", "Ab6", "Ab1", "Ab2", "Ab3", "Ab4", "Ab5", "Ab6", "Ab1", 
    "Ab2", "Ab3", "Ab4", "Ab5", "Ab6", "Ab1", "Ab2", "Ab3", "Ab4", 
    "Ab5", "Ab6", "Ab1", "Ab2", "Ab3", "Ab4", "Ab5", "Ab6", "Ab3", 
    "Ab4", "Ab5", "Ab6", "Ab1", "Ab2", "Ab4", "Ab5", "Ab1", "Ab2", 
    "Ab3", "Ab4", "Ab6", "Ab1", "Ab2", "Ab3", "Ab4", "Ab5", "Ab6", 
    "Ab1", "Ab2", "Ab3", "Ab4", "Ab5", "Ab6", "Ab1", "Ab2", "Ab3", 
    "Ab4", "Ab5", "Ab6", "Ab1", "Ab2", "Ab3", "Ab4", "Ab5", "Ab6", 
    "Ab1", "Ab3", "Ab4", "Ab5", "Ab6", "Ab1", "Ab2", "Ab3", "Ab4", 
    "Ab6", "Ab1", "Ab2", "Ab3", "Ab4", "Ab5", "Ab6", "Ab1", "Ab2", 
    "Ab3", "Ab4", "Ab5", "Ab6", "Ab1", "Ab2", "Ab4", "Ab5", "Ab6", 
    "Ab1", "Ab2", "Ab3", "Ab4", "Ab5", "Ab6", "Ab1", "Ab2", "Ab3", 
    "Ab4", "Ab5", "Ab6", "Ab1", "Ab2", "Ab3", "Ab4", "Ab5", "Ab6", 
    "Ab1", "Ab2", "Ab3", "Ab4", "Ab5", "Ab6", "Ab1", "Ab2", "Ab3", 
    "Ab4", "Ab5", "Ab6", "Ab1", "Ab2", "Ab3", "Ab4", "Ab5", "Ab6", 
    "Ab1", "Ab2", "Ab3", "Ab4", "Ab5", "Ab6", "Ab1", "Ab2", "Ab3", 
    "Ab4", "Ab5", "Ab6", "Ab1", "Ab2", "Ab3", "Ab4", "Ab5", "Ab6", 
    "Ab1", "Ab4", "Ab5", "Ab6", "Ab2", "Ab3", "Ab1", "Ab3", "Ab4", 
    "Ab5", "Ab1", "Ab2", "Ab4", "Ab5", "Ab6", "Ab1", "Ab2", "Ab3", 
    "Ab5", "Ab6", "Ab1", "Ab2", "Ab3", "Ab4", "Ab6", "Ab1", "Ab2", 
    "Ab3", "Ab4", "Ab5", "Ab1", "Ab2", "Ab3", "Ab4", "Ab5", "Ab6", 
    "Ab1", "Ab2", "Ab3", "Ab4", "Ab5", "Ab6", "Ab1", "Ab2", "Ab3", 
    "Ab4", "Ab5", "Ab6", "Ab1", "Ab2", "Ab3", "Ab4", "Ab5", "Ab6", 
    "Ab1", "Ab3", "Ab4", "Ab5", "Ab6", "Ab1", "Ab2", "Ab3", "Ab4", 
    "Ab5", "Ab1", "Ab2", "Ab3", "Ab4", "Ab5", "Ab6", "Ab1", "Ab3", 
    "Ab4", "Ab5", "Ab6", "Ab1", "Ab2", "Ab3", "Ab4", "Ab6", "Ab1", 
    "Ab2", "Ab3", "Ab4", "Ab5", "Ab6", "Ab1", "Ab2", "Ab3", "Ab4", 
    "Ab5", "Ab6", "Ab1", "Ab2", "Ab3", "Ab4", "Ab5", "Ab6", "Ab1", 
    "Ab2", "Ab3", "Ab4", "Ab5", "Ab6", "Ab1", "Ab2", "Ab3", "Ab4", 
    "Ab5", "Ab6"), concentration = c(538, 40, 7300, 530, 127, 230, 
    50, 140, 215, 440, 50, 540, 120, 3850, 12340, 5090, 3190, 610, 
    6360, 520, 140, 190, 500, 30, 460, 120, 190, 350, 30, 6070, 50, 
    150, 370, 40, 6670, 440, 220, 3820, 3860, 11960, 5350, 2000, 
    2570, 1670, 11390, 3950, 1170, 810, 3240, 2610, 11840, 4400, 
    1580, 1900, 320, 30, 6150, 300, 110, 150, 2560, 1660, 11910, 
    1120, 870, 3830, 3610, 12320, 5440, 2040, 2860, 2810, 1840, 11250, 
    2730, 1040, 1080, 3430, 12440, 5160, 1770, 2230, 400, 90, 3480, 
    230, 90, 490, 120, 3230, 270, 170, 110, 550, 150, 3570, 330, 
    190, 120, 430, 110, 3010, 240, 150, 130, 690, 120, 4050, 270, 
    200, 130, 660, 80, 3530, 220, 160, 80, 3530, 260, 170, 110, 680, 
    70, 220, 160, 1240, 1430, 3800, 4700, 990, 560, 460, 2770, 3500, 
    310, 330, 1120, 1230, 3000, 5000, 720, 890, 910, 860, 2930, 4540, 
    480, 590, 1410, 1550, 3990, 5140, 900, 1170, 1710, 4060, 5440, 
    1120, 1290, 690, 780, 2830, 3390, 470, 1650, 1820, 4220, 5430, 
    990, 1470, 2630, 530, 4050, 580, 350, 380, 1230, 120, 280, 120, 
    110, 1860, 700, 3720, 700, 440, 500, 1290, 230, 4020, 300, 170, 
    140, 2920, 640, 4650, 690, 380, 390, 1790, 880, 4320, 830, 530, 
    620, 970, 200, 3740, 310, 190, 120, 2880, 700, 4080, 760, 470, 
    520, 1450, 90, 5310, 920, 150, 140, 1360, 60, 5190, 800, 130, 
    120, 1370, 100, 5100, 1040, 140, 140, 1250, 770, 130, 110, 130, 
    5430, 1710, 5530, 1100, 170, 1390, 110, 1070, 160, 140, 1540, 
    100, 5720, 170, 170, 1260, 30, 4140, 260, 40, 710, 20, 3530, 
    220, 80, 1000, 40, 3720, 210, 80, 50, 610, 30, 3710, 180, 60, 
    50, 2030, 30, 3820, 240, 70, 60, 720, 20, 3590, 180, 80, 50, 
    820, 3710, 160, 70, 50, 660, 20, 3450, 160, 60, 310, 80, 4910, 
    370, 130, 80, 230, 3830, 260, 120, 90, 230, 100, 3910, 410, 120, 
    190, 60, 4210, 240, 100, 80, 320, 70, 4220, 330, 120, 60, 220, 
    80, 3910, 320, 120, 110, 220, 50, 3830, 260, 100, 80, 20, 10, 
    40, 10, 10, 10), Oxygen = c("+", "+", "+", "+", "+", "+", "+", 
    "+", "+", "+", "+", "+", "+", "+", "+", "+", "+", "-", "-", "-", 
    "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", 
    "-", "-", "-", "-", "+", "+", "+", "+", "+", "+", "+", "+", "+", 
    "+", "+", "+", "+", "+", "+", "+", "+", "+", "+", "+", "+", "+", 
    "+", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", 
    "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "+", "+", "+", 
    "+", "+", "+", "+", "+", "+", "+", "+", "+", "+", "+", "+", "+", 
    "+", "+", "+", "+", "+", "+", "+", "-", "-", "-", "-", "-", "-", 
    "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", 
    "-", "+", "+", "+", "+", "+", "+", "+", "+", "+", "+", "+", "+", 
    "+", "+", "+", "+", "+", "+", "+", "+", "+", "+", "+", "-", "-", 
    "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", 
    "-", "-", "-", "-", "-", "-", "-", "+", "+", "+", "+", "+", "+", 
    "+", "+", "+", "+", "+", "+", "+", "+", "+", "+", "+", "+", "+", 
    "+", "+", "+", "+", "-", "-", "-", "-", "-", "-", "-", "-", "-", 
    "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", 
    "-", "-", "+", "+", "+", "+", "+", "+", "+", "+", "+", "+", "+", 
    "+", "+", "+", "+", "+", "+", "+", "+", "+", "+", "+", "-", "-", 
    "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", 
    "-", "+", "+", "+", "+", "+", "+", "+", "+", "+", "+", "+", "+", 
    "+", "+", "+", "+", "+", "+", "+", "+", "+", "+", "-", "-", "-", 
    "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", 
    "-", "-", "-", "-", "-", "-", "+", "+", "+", "+", "+", "+", "+", 
    "+", "+", "+", "+", "+", "+", "+", "+", "+", "+", "+", "+", "+", 
    "+", "+", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", 
    "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-"
    ), Donor = c("D1", "D1", "D1", "D1", "D1", "D1", "D1", "D1", 
    "D1", "D1", "D1", "D1", "D1", "D1", "D1", "D1", "D1", "D1", "D1", 
    "D1", "D1", "D1", "D1", "D1", "D1", "D1", "D1", "D1", "D1", "D1", 
    "D1", "D1", "D1", "D1", "D1", "D1", "D1", "D2", "D2", "D2", "D2", 
    "D2", "D2", "D2", "D2", "D2", "D2", "D2", "D2", "D2", "D2", "D2", 
    "D2", "D2", "D2", "D2", "D2", "D2", "D2", "D2", "D2", "D2", "D2", 
    "D2", "D2", "D2", "D2", "D2", "D2", "D2", "D2", "D2", "D2", "D2", 
    "D2", "D2", "D2", "D2", "D2", "D2", "D2", "D2", "D3", "D3", "D3", 
    "D3", "D3", "D3", "D3", "D3", "D3", "D3", "D3", "D3", "D3", "D3", 
    "D3", "D3", "D3", "D3", "D3", "D3", "D3", "D3", "D3", "D3", "D3", 
    "D3", "D3", "D3", "D3", "D3", "D3", "D3", "D3", "D3", "D3", "D3", 
    "D3", "D3", "D3", "D3", "D3", "D3", "D3", "D4", "D4", "D4", "D4", 
    "D4", "D4", "D4", "D4", "D4", "D4", "D4", "D4", "D4", "D4", "D4", 
    "D4", "D4", "D4", "D4", "D4", "D4", "D4", "D4", "D4", "D4", "D4", 
    "D4", "D4", "D4", "D4", "D4", "D4", "D4", "D4", "D4", "D4", "D4", 
    "D4", "D4", "D4", "D4", "D4", "D4", "D4", "D4", "D5", "D5", "D5", 
    "D5", "D5", "D5", "D5", "D5", "D5", "D5", "D5", "D5", "D5", "D5", 
    "D5", "D5", "D5", "D5", "D5", "D5", "D5", "D5", "D5", "D5", "D5", 
    "D5", "D5", "D5", "D5", "D5", "D5", "D5", "D5", "D5", "D5", "D5", 
    "D5", "D5", "D5", "D5", "D5", "D5", "D5", "D5", "D5", "D5", "D5", 
    "D6", "D6", "D6", "D6", "D6", "D6", "D6", "D6", "D6", "D6", "D6", 
    "D6", "D6", "D6", "D6", "D6", "D6", "D6", "D6", "D6", "D6", "D6", 
    "D6", "D6", "D6", "D6", "D6", "D6", "D6", "D6", "D6", "D6", "D6", 
    "D6", "D6", "D6", "D6", "D6", "D7", "D7", "D7", "D7", "D7", "D7", 
    "D7", "D7", "D7", "D7", "D7", "D7", "D7", "D7", "D7", "D7", "D7", 
    "D7", "D7", "D7", "D7", "D7", "D7", "D7", "D7", "D7", "D7", "D7", 
    "D7", "D7", "D7", "D7", "D7", "D7", "D7", "D7", "D7", "D7", "D7", 
    "D7", "D7", "D7", "D7", "D7", "D8", "D8", "D8", "D8", "D8", "D8", 
    "D8", "D8", "D8", "D8", "D8", "D8", "D8", "D8", "D8", "D8", "D8", 
    "D8", "D8", "D8", "D8", "D8", "D8", "D8", "D8", "D8", "D8", "D8", 
    "D8", "D8", "D8", "D8", "D8", "D8", "D8", "D8", "D8", "D8", "D8", 
    "D8", "D8", "D8", "D8", "D8", "D8", "D8"), Illness = c("pneumonia", 
    "pneumonia", "pneumonia", "pneumonia", "pneumonia", "pneumonia", 
    "gastro", "gastro", "gastro", "TB", "TB", "TB", "TB", "lyme", 
    "lyme", "lyme", "lyme", "pneumonia", "pneumonia", "pneumonia", 
    "pneumonia", "pneumonia", "gastro", "gastro", "gastro", "gastro", 
    "gastro", "TB", "TB", "TB", "TB", "TB", "lyme", "lyme", "lyme", 
    "lyme", "lyme", "pneumonia", "pneumonia", "pneumonia", "pneumonia", 
    "pneumonia", "gastro", "gastro", "gastro", "gastro", "gastro", 
    "gastro", "TB", "TB", "TB", "TB", "TB", "TB", "lyme", "lyme", 
    "lyme", "lyme", "lyme", "lyme", "pneumonia", "pneumonia", "pneumonia", 
    "pneumonia", "pneumonia", "gastro", "gastro", "gastro", "gastro", 
    "gastro", "gastro", "TB", "TB", "TB", "TB", "TB", "TB", "lyme", 
    "lyme", "lyme", "lyme", "lyme", "pneumonia", "pneumonia", "pneumonia", 
    "pneumonia", "pneumonia", "gastro", "gastro", "gastro", "gastro", 
    "gastro", "gastro", "TB", "TB", "TB", "TB", "TB", "TB", "lyme", 
    "lyme", "lyme", "lyme", "lyme", "lyme", "pneumonia", "pneumonia", 
    "pneumonia", "pneumonia", "pneumonia", "pneumonia", "gastro", 
    "gastro", "gastro", "gastro", "gastro", "gastro", "TB", "TB", 
    "TB", "TB", "lyme", "lyme", "lyme", "lyme", "pneumonia", "pneumonia", 
    "pneumonia", "pneumonia", "pneumonia", "gastro", "gastro", "gastro", 
    "gastro", "gastro", "gastro", "TB", "TB", "TB", "TB", "TB", "TB", 
    "lyme", "lyme", "lyme", "lyme", "lyme", "lyme", "pneumonia", 
    "pneumonia", "pneumonia", "pneumonia", "pneumonia", "pneumonia", 
    "gastro", "gastro", "gastro", "gastro", "gastro", "TB", "TB", 
    "TB", "TB", "TB", "lyme", "lyme", "lyme", "lyme", "lyme", "lyme", 
    "pneumonia", "pneumonia", "pneumonia", "pneumonia", "pneumonia", 
    "pneumonia", "gastro", "gastro", "gastro", "gastro", "gastro", 
    "TB", "TB", "TB", "TB", "TB", "TB", "lyme", "lyme", "lyme", "lyme", 
    "lyme", "lyme", "pneumonia", "pneumonia", "pneumonia", "pneumonia", 
    "pneumonia", "pneumonia", "gastro", "gastro", "gastro", "gastro", 
    "gastro", "gastro", "TB", "TB", "TB", "TB", "TB", "TB", "lyme", 
    "lyme", "lyme", "lyme", "lyme", "lyme", "pneumonia", "pneumonia", 
    "pneumonia", "pneumonia", "pneumonia", "pneumonia", "gastro", 
    "gastro", "gastro", "gastro", "gastro", "gastro", "TB", "TB", 
    "TB", "TB", "TB", "TB", "lyme", "lyme", "lyme", "lyme", "pneumonia", 
    "pneumonia", "gastro", "gastro", "gastro", "gastro", "TB", "TB", 
    "TB", "TB", "TB", "lyme", "lyme", "lyme", "lyme", "lyme", "pneumonia", 
    "pneumonia", "pneumonia", "pneumonia", "pneumonia", "gastro", 
    "gastro", "gastro", "gastro", "gastro", "TB", "TB", "TB", "TB", 
    "TB", "TB", "lyme", "lyme", "lyme", "lyme", "lyme", "lyme", "pneumonia", 
    "pneumonia", "pneumonia", "pneumonia", "pneumonia", "pneumonia", 
    "gastro", "gastro", "gastro", "gastro", "gastro", "gastro", "TB", 
    "TB", "TB", "TB", "TB", "lyme", "lyme", "lyme", "lyme", "lyme", 
    "pneumonia", "pneumonia", "pneumonia", "pneumonia", "pneumonia", 
    "pneumonia", "gastro", "gastro", "gastro", "gastro", "gastro", 
    "TB", "TB", "TB", "TB", "TB", "lyme", "lyme", "lyme", "lyme", 
    "lyme", "lyme", "pneumonia", "pneumonia", "pneumonia", "pneumonia", 
    "pneumonia", "pneumonia", "gastro", "gastro", "gastro", "gastro", 
    "gastro", "gastro", "TB", "TB", "TB", "TB", "TB", "TB", "lyme", 
    "lyme", "lyme", "lyme", "lyme", "lyme")), row.names = c(NA, -345L
    ), class = c("tbl_df", "tbl", "data.frame"))
3

3 Answers

2
votes

Here is one possible solution:

library(dplyr)
df_sex_comparisons <- 
  mutate(
    df, 
    Sex = case_when(
      Donor %in% paste0("D", c(1:3, 8)) ~ "Female",
      Donor %in% paste0("D", 4:7) ~ "Male",
      TRUE ~ NA_character_
    )
  )

What went wrong in your attempt ?

  • You are not using = nor == correctly.
  • filter() expects as input a data.frame just like mutate().
  • D4:D7 is meaningless except in some special circumstances such select() for column names. : usually only works with numbers.
0
votes

You need filter if you want a subset of your data. Don't think you require that here.

> df_sex_comparisons %>% mutate(Sex = case_when(Donor %in% c('D1','D2','D3','D8') ~ 'Female', TRUE ~ 'Male'))
# A tibble: 345 x 7
   Sample Drug  concentration Oxygen Donor Illness   Sex   
    <dbl> <chr>         <dbl> <chr>  <chr> <chr>     <chr> 
 1      1 Ab1             538 +      D1    pneumonia Female
 2      2 Ab2              40 +      D1    pneumonia Female
 3      3 Ab3            7300 +      D1    pneumonia Female
 4      4 Ab4             530 +      D1    pneumonia Female
 5      5 Ab5             127 +      D1    pneumonia Female
 6      6 Ab6             230 +      D1    pneumonia Female
 7     43 Ab2              50 +      D1    gastro    Female
 8     46 Ab5             140 +      D1    gastro    Female
 9     47 Ab6             215 +      D1    gastro    Female
10     83 Ab1             440 +      D1    TB        Female
# ... with 335 more rows
> 
0
votes

I find reference tables helpful here. It can be good data practice (tidy data)!

library(dplyr)

# you can make this table a few ways, i found this easy
male <- paste0("D", c(1:3, 8))
female <- paste0("D", 4:7)

donor_table <- tibble(Donor = c(male, female),
                      Sex = c(rep("Male", length(male)), rep("Female", length(female))))

# join in the column!
df %>% 
  left_join(donor_table, by = "Donor")
# A tibble: 345 x 7
   Sample Drug  concentration Oxygen Donor Illness   Sex  
    <dbl> <chr>         <dbl> <chr>  <chr> <chr>     <chr>
 1      1 Ab1             538 +      D1    pneumonia Male 
 2      2 Ab2              40 +      D1    pneumonia Male 
 3      3 Ab3            7300 +      D1    pneumonia Male 
 4      4 Ab4             530 +      D1    pneumonia Male 
 5      5 Ab5             127 +      D1    pneumonia Male 
 6      6 Ab6             230 +      D1    pneumonia Male 
...