根据条件复杂的另一行调整数据框行

adjust data-frame row based on another row with a complicated condition

我有以下示例数据框:

structure(list(V327 = c("A", "A"), V328 = c("P", "P"), V329 = c("I", 
"I"), V330 = c("T", "T"), V331 = c("A", "A"), V332 = c("Y", "Y"
), V333 = c("A", "A"), V334 = c("Q", "Q"), V340 = c("Q", "Q"), 
    V341 = c("T", "T"), V342 = c("R", "R"), V343 = c("G", "G"
    ), V355 = c("X", "L"), V356 = c("X", "L"), V363 = c("X", 
    "G"), V364 = c("X", "C"), V365 = c("X", "I"), V367 = c("X", 
    "I"), V368 = c("X", "T"), V369 = c("X", "S"), V370 = c("X", 
    "L"), V384 = c("X", "T"), V418 = c("X", "G"), V421 = c("X", 
    "R"), V422 = c("X", "D"), V431 = c("X", "K"), V485 = c("X", 
    "N"), V486 = c("X", "Q"), V487 = c("X", "V"), V488 = c("X", 
    "E"), V489 = c("X", "G"), V490 = c("X", "E"), V491 = c("X", 
    "V"), V531 = c("X", "Q"), V532 = c("X", "I"), V533 = c("X", 
    "V"), V534 = c("X", "S"), V535 = c("X", "T"), V536 = c("X", 
    "A"), V544 = c("X", "T"), V545 = c("X", "Q"), V546 = c("T", 
    "T"), V547 = c("F", "F"), V548 = c("L", "L"), V567 = c("A", 
    "A"), V569 = c("T", "T"), V570 = c("C", "C"), V571 = c("I", 
    "I"), V572 = c("N", "N"), V573 = c("G", "G"), V576 = c("V", 
    "V"), V577 = c("C", "C"), V617 = c("W", "W"), V618 = c("T", 
    "T"), V619 = c("V", "V"), V620 = c("Y", "Y"), V621 = c("H", 
    "H"), V646 = c("G", "G"), V647 = c("A", "A"), V668 = c("G", 
    "G"), V669 = c("T", "T"), V711 = c("R", "R"), V712 = c("T", 
    "T"), V718 = c("I", "I"), V719 = c("A", "A"), V744 = c("S", 
    "S"), V745 = c("X", "P"), V751 = c("K", "K"), V752 = c("G", 
    "G"), V753 = c("P", "P"), V754 = c("V", "V"), V755 = c("I", 
    "I"), V760 = c("Q", "Q"), V770 = c("M", "M"), V771 = c("Y", 
    "Y"), V774 = c("T", "T"), V775 = c("N", "N"), V776 = c("V", 
    "V"), V777 = c("D", "D"), V778 = c("Q", "Q"), V793 = c("D", 
    "D"), V794 = c("L", "L"), V796 = c("V", "V"), V797 = c("G", 
    "G"), V798 = c("W", "W"), V799 = c("P", "P"), V800 = c("A", 
    "A"), V807 = c("P", "P"), V820 = c("Q", "Q"), V821 = c("G", 
    "G"), V846 = c("A", "S"), V847 = c("R", "R"), V848 = c("S", 
    "S"), V853 = c("L", "L"), V854 = c("T", "T"), V855 = c("P", 
    "P"), V905 = c("C", "C"), V930 = c("T", "T"), V931 = c("C", 
    "C"), V932 = c("G", "G"), V970 = c("S", "S"), V975 = c("S", 
    "S"), V976 = c("D", "D"), V977 = c("L", "L"), V978 = c("Y", 
    "Y"), V979 = c("L", "L"), V1012 = c("V", "V"), V1013 = c("T", 
    "T"), V1014 = c("R", "R"), V1015 = c("H", "H"), V1016 = c("A", 
    "A"), V1017 = c("D", "D"), V1065 = c("V", "V"), V1085 = c("I", 
    "I"), V1086 = c("P", "P"), V1087 = c("V", "V"), V1088 = c("R", 
    "R"), V1089 = c("R", "R"), V1108 = c("R", "R"), V1109 = c("G", 
    "G"), V1120 = c("D", "D"), V1121 = c("S", "S"), V1122 = c("R", 
    "R"), V1173 = c("G", "G"), V1174 = c("S", "S"), V1175 = c("L", 
    "L"), V1193 = c("L", "L"), V1194 = c("S", "S"), V1195 = c("P", 
    "P"), V1196 = c("R", "R"), V1216 = c("P", "P"), V1217 = c("I", 
    "I"), V1308 = c("S", "S"), V1309 = c("Y", "Y"), V1310 = c("L", 
    "L"), V1311 = c("K", "K"), V1314 = c("G", "G"), V1315 = c("S", 
    "S"), V1363 = c("S", "S"), V1364 = c("G", "G"), V1382 = c("G", 
    "G"), V1383 = c("P", "P"), V1384 = c("L", "L"), V1396 = c("L", 
    "L"), V1397 = c("C", "C"), V1401 = c("P", "P"), V1402 = c("A", 
    "T"), V1403 = c("G", "G"), V1404 = c("H", "H"), V1405 = c("A", 
    "A"), V1406 = c("V", "V"), V1407 = c("G", "G"), V1437 = c("I", 
    "L"), V1438 = c("F", "F"), V1439 = c("R", "R"), V1440 = c("A", 
    "A"), V1441 = c("A", "A"), V1442 = c("V", "V"), V1443 = c("C", 
    "C"), V1448 = c("T", "T"), V1457 = c("R", "R"), V1458 = c("G", 
    "G"), V1464 = c("V", "V"), V1465 = c("A", "A"), V1529 = c("K", 
    "K"), V1530 = c("A", "A"), V1531 = c("V", "V"), V1532 = c("D", 
    "D"), V1533 = c("F", "F"), V1534 = c("I", "I"), V1538 = c("P", 
    "P"), V1539 = c("V", "V"), V1540 = c("E", "E"), V1555 = c("G", 
    "N"), V1556 = c("L", "L"), V1568 = c("E", "E"), V1569 = c("T", 
    "T"), V1570 = c("T", "T"), V1571 = c("M", "M"), V1572 = c("R", 
    "R"), V1573 = c("S", "G"), V1574 = c("P", "S"), V1575 = c("V", 
    "H"), V1576 = c("F", "H"), V1577 = c("T", "H"), V1578 = c("D", 
    "H"), V1579 = c("N", "H"), V1580 = c("S", "H"), V1581 = c("S", 
    "-"), V1582 = c("P", "-"), V1583 = c("P", "-"), V1584 = c("T", 
    "-"), V1585 = c("V", "-"), V1586 = c("P", "-"), V1587 = c("E", 
    "-"), V1588 = c("S", "-"), V1589 = c("Y", "-"), V1590 = c("Q", 
    "-"), V1591 = c("V", "-"), V1592 = c("A", "-"), V1593 = c("H", 
    "-"), V1594 = c("L", "-"), V1595 = c("H", "-"), V1596 = c("A", 
    "-"), V1597 = c("P", "-"), V1598 = c("T", "-"), V1599 = c("G", 
    "-"), V1600 = c("S", "-"), V1601 = c("G", "-"), V1602 = c("K", 
    "-"), V1603 = c("S", "-"), V1604 = c("T", "-"), V1605 = c("K", 
    "-"), V1606 = c("V", "-"), V1607 = c("P", "-"), V1608 = c("A", 
    "-"), V1609 = c("A", "-"), V1610 = c("Y", "-"), V1611 = c("A", 
    "-"), V1612 = c("A", "-"), V1613 = c("Q", "-"), V1614 = c("G", 
    "-"), V1615 = c("Y", "-"), V1616 = c("K", "-"), V1617 = c("V", 
    "-"), V1618 = c("L", "-"), V1619 = c("V", "-"), V1620 = c("L", 
    "-"), V1621 = c("N", "-"), V1622 = c("P", "-"), V1623 = c("S", 
    "-"), V1624 = c("V", "-"), V1625 = c("A", "-"), V1626 = c("A", 
    "-"), V1627 = c("T", "-"), V1628 = c("L", "-"), V1629 = c("G", 
    "-"), V1630 = c("F", "-"), V1631 = c("G", "-"), V1632 = c("A", 
    "-"), V1633 = c("Y", "-"), V1634 = c("M", "-"), V1635 = c("S", 
    "-"), V1636 = c("R", "-"), V1637 = c("A", "-"), V1638 = c("X", 
    "-"), V1639 = c("G", "-"), V1640 = c("X", "-"), V1641 = c("D", 
    "-"), V1642 = c("P", "-"), V1643 = c("N", "-"), V1644 = c("I", 
    "-"), V1645 = c("R", "-"), V1646 = c("T", "-"), V1647 = c("G", 
    "-"), V1648 = c("V", "-"), V1649 = c("R", "-"), V1650 = c("T", 
    "-"), V1651 = c("I", "-"), V1652 = c("T", "-"), V1653 = c("T", 
    "-"), V1654 = c("G", "-"), V1655 = c("S", "-"), V1656 = c("P", 
    "-"), V1657 = c("I", "-"), V1658 = c("T", "-"), V1659 = c("Y", 
    "-"), V1660 = c("S", "-"), V1661 = c("T", "-"), V1662 = c("Y", 
    "-"), V1663 = c("G", "-"), V1664 = c("K", "-"), V1665 = c("F", 
    "-"), V1666 = c("L", "-"), V1667 = c("A", "-"), V1668 = c("D", 
    "-"), V1669 = c("G", "-"), V1670 = c("G", "-"), V1671 = c("C", 
    "-"), V1672 = c("S", "-"), V1673 = c("G", "-"), V1674 = c("G", 
    "-"), V1675 = c("A", "-"), V1676 = c("Y", "-"), V1677 = c("D", 
    "-"), V1678 = c("I", "-"), V1679 = c("I", "-"), V1680 = c("I", 
    "-"), V1681 = c("C", "-"), V1682 = c("D", "-"), V1683 = c("E", 
    "-"), V1684 = c("C", "-"), V1685 = c("H", "-"), V1686 = c("S", 
    "-"), V1687 = c("T", "-"), V1688 = c("D", "-"), V1689 = c("A", 
    "-"), V1690 = c("T", "-"), V1691 = c("S", "-"), V1692 = c("V", 
    "-"), V1693 = c("L", "-"), V1694 = c("G", "-"), V1695 = c("I", 
    "-"), V1696 = c("G", "-"), V1697 = c("T", "-"), V1698 = c("V", 
    "-"), V1699 = c("L", "-"), V1700 = c("D", "-"), V1701 = c("Q", 
    "-"), V1702 = c("A", "-"), V1703 = c("E", "-"), V1704 = c("T", 
    "-"), V1705 = c("A", "-"), V1706 = c("G", "-"), V1707 = c("V", 
    "-"), V1708 = c("R", "-"), V1709 = c("L", "-"), V1710 = c("T", 
    "-"), V1711 = c("V", "-"), V1712 = c("L", "-"), V1713 = c("A", 
    "-"), V1714 = c("T", "-"), V1715 = c("A", "-"), V1716 = c("T", 
    "-"), V1717 = c("P", "-"), V1718 = c("P", "-"), V1719 = c("G", 
    "-"), V1720 = c("S", "-"), V1721 = c("V", "-"), V1722 = c("T", 
    "-"), V1723 = c("V", "-"), V1724 = c("P", "-"), V1725 = c("H", 
    "-"), V1726 = c("P", "-"), V1727 = c("D", "-"), V1728 = c("I", 
    "-"), V1729 = c("E", "-"), V1730 = c("E", "-"), V1731 = c("V", 
    "-"), V1732 = c("A", "-"), V1733 = c("L", "-"), V1734 = c("S", 
    "-"), V1735 = c("X", "-"), V1736 = c("T", "-"), V1737 = c("G", 
    "-"), V1738 = c("E", "-"), V1739 = c("I", "-"), V1740 = c("P", 
    "-"), V1741 = c("F", "-"), V1742 = c("Y", "-"), V1743 = c("G", 
    "-"), V1744 = c("K", "-"), V1745 = c("A", "-"), V1746 = c("I", 
    "-"), V1747 = c("P", "-"), V1748 = c("L", "-"), V1749 = c("E", 
    "-"), V1750 = c("V", "-"), V1751 = c("I", "-"), V1752 = c("K", 
    "-"), V1753 = c("G", "-"), V1754 = c("G", "-"), V1755 = c("R", 
    "-"), V1756 = c("H", "-"), V1757 = c("L", "-"), V1758 = c("I", 
    "-"), V1759 = c("F", "-"), V1760 = c("C", "-"), V1761 = c("H", 
    "-"), V1762 = c("S", "-"), V1763 = c("K", "-"), V1764 = c("K", 
    "-"), V1765 = c("K", "-"), V1766 = c("C", "-"), V1767 = c("D", 
    "-"), V1768 = c("E", "-"), V1769 = c("L", "-"), V1770 = c("A", 
    "-"), V1771 = c("A", "-"), V1772 = c("K", "-"), V1773 = c("L", 
    "-"), V1774 = c("R", "-"), V1775 = c("A", "-"), V1776 = c("L", 
    "-"), V1777 = c("G", "-"), V1778 = c("V", "-"), V1779 = c("N", 
    "-"), V1780 = c("A", "-"), V1781 = c("V", "-"), V1782 = c("A", 
    "-"), V1783 = c("Y", "-"), V1784 = c("Y", "-"), V1785 = c("R", 
    "-"), V1786 = c("G", "-"), V1787 = c("L", "-"), V1788 = c("D", 
    "-"), V1789 = c("V", "-"), V1790 = c("S", "-"), V1791 = c("V", 
    "-"), V1792 = c("I", "-"), V1793 = c("P", "-"), V1794 = c("T", 
    "-"), V1795 = c("S", "-"), V1796 = c("G", "-"), V1797 = c("D", 
    "-"), V1798 = c("V", "-"), V1799 = c("V", "-"), V1800 = c("V", 
    "-"), V1801 = c("V", "-"), V1802 = c("A", "-"), V1803 = c("T", 
    "-"), V1804 = c("D", "-"), V1805 = c("A", "-"), V1806 = c("L", 
    "-"), V1807 = c("M", "-"), V1808 = c("T", "-"), V1809 = c("G", 
    "-"), V1810 = c("Y", "-"), V1811 = c("T", "-"), V1812 = c("G", 
    "-"), V1813 = c("D", "-"), V1814 = c("F", "-"), V1815 = c("D", 
    "-"), V1816 = c("S", "-"), V1817 = c("V", "-"), V1818 = c("I", 
    "-"), V1819 = c("D", "-"), V1820 = c("C", "-"), V1821 = c("N", 
    "-"), V1822 = c("T", "-"), V1823 = c("C", "-"), V1824 = c("V", 
    "-"), V1825 = c("T", "-"), V1826 = c("Q", "-"), V1827 = c("T", 
    "-"), V1828 = c("V", "-"), V1829 = c("D", "-"), V1830 = c("F", 
    "-"), V1831 = c("S", "-"), V1832 = c("L", "-"), V1833 = c("D", 
    "-"), V1834 = c("X", "-"), V1835 = c("T", "-"), V1836 = c("X", 
    "-"), V1837 = c("T", "-"), V1838 = c("I", "-"), V1839 = c("X", 
    "-"), V1840 = c("X", "-"), V1841 = c("X", "-"), V1842 = c("X", 
    "-"), V1843 = c("X", "-"), V1844 = c("P", "-"), V1845 = c("X", 
    "-"), V1846 = c("X", "-"), V1847 = c("A", "-"), V1848 = c("X", 
    "-"), V1849 = c("X", "-"), V1850 = c("X", "-"), V1851 = c("T", 
    "-"), V1852 = c("Q", "-"), V1853 = c("R", "-"), V1854 = c("R", 
    "-"), V1855 = c("G", "-"), V1856 = c("R", "-"), V1857 = c("T", 
    "-"), V1858 = c("G", "-"), V1859 = c("R", "-"), V1860 = c("G", 
    "-"), V1861 = c("K", "-"), V1862 = c("P", "-"), V1863 = c("G", 
    "-"), V1864 = c("I", "-"), V1865 = c("Y", "-"), V1866 = c("R", 
    "-"), V1867 = c("F", "-"), V1868 = c("V", "-"), V1869 = c("A", 
    "-"), V1870 = c("P", "-"), V1871 = c("G", "-"), V1872 = c("E", 
    "-"), V1873 = c("R", "-"), V1874 = c("P", "-"), V1875 = c("S", 
    "-"), V1876 = c("G", "-"), V1877 = c("M", "-"), V1878 = c("F", 
    "-"), V1879 = c("D", "-"), V1880 = c("S", "-"), V1881 = c("S", 
    "-"), V1882 = c("V", "-"), V1883 = c("L", "-"), V1884 = c("C", 
    "-"), V1885 = c("E", "-"), V1886 = c("C", "-"), V1887 = c("Y", 
    "-"), V1888 = c("D", "-"), V1889 = c("A", "-"), V1890 = c("G", 
    "-"), V1891 = c("C", "-"), V1892 = c("A", "-"), V1893 = c("W", 
    "-"), V1894 = c("Y", "-"), V1895 = c("E", "-"), V1896 = c("L", 
    "-"), V1897 = c("T", "-"), V1898 = c("P", "-"), V1899 = c("A", 
    "-"), V1900 = c("E", "-"), V1901 = c("T", "-"), V1902 = c("T", 
    "-"), V1903 = c("V", "-"), V1904 = c("R", "-"), V1905 = c("L", 
    "-"), V1906 = c("R", "-"), V1907 = c("A", "-"), V1908 = c("Y", 
    "-"), V1909 = c("M", "-"), V1910 = c("N", "-"), V1911 = c("T", 
    "-"), V1912 = c("P", "-"), V1913 = c("G", "-"), V1914 = c("L", 
    "-"), V1915 = c("P", "-"), V1916 = c("V", "-"), V1917 = c("C", 
    "-"), V1918 = c("Q", "-"), V1919 = c("D", "-"), V1920 = c("H", 
    "-"), V1921 = c("L", "-"), V1922 = c("E", "-"), V1923 = c("F", 
    "-"), V1924 = c("W", "-"), V1925 = c("E", "-"), V1926 = c("G", 
    "-"), V1927 = c("V", "-"), V1928 = c("F", "-"), V1929 = c("T", 
    "-"), V1930 = c("G", "-"), V1931 = c("L", "-"), V1932 = c("T", 
    "-"), V1933 = c("H", "-"), V1934 = c("I", "-"), V1935 = c("D", 
    "-"), V1936 = c("A", "-"), V1937 = c("H", "-"), V1938 = c("F", 
    "-"), V1939 = c("L", "-"), V1940 = c("S", "-"), V1941 = c("Q", 
    "-"), V1942 = c("T", "-"), V1943 = c("K", "-"), V1944 = c("Q", 
    "-"), V1945 = c("S", "-"), V1946 = c("G", "-"), V1947 = c("E", 
    "-"), V1948 = c("T", "-"), V1949 = c("F", "-"), V1950 = c("P", 
    "-"), V1951 = c("Y", "-"), V1952 = c("L", "-"), V1953 = c("V", 
    "-"), V1954 = c("A", "-"), V1955 = c("Y", "-"), V1956 = c("Q", 
    "-"), V1957 = c("A", "-"), V1958 = c("T", "-"), V1959 = c("V", 
    "-"), V1960 = c("C", "-")), class = "data.frame", row.names = c("UniRef90_A1EH68", 
"1a1r_3B"))

我希望执行以下操作,如果行“UniRef90_A1EH68”的特定列中有“X”,我希望将其替换为另一行值,除非另一行出现以下内容字符“-”在那种情况下,我希望将其保留为“X”。

我做了以下(有效):

species_name = "UniRef90_A1EH68"
ref_name = "1a1r_3B"
fixFastaSeq <- function(sub_muscle_df, species_name, ref_name) {
  ref_row = sub_muscle_df[species_name,]
  column_to_keep = !(ref_row == "-" | ref_row == '.')
  # cleaned based on the species
  sub_muscle_df = sub_muscle_df[, column_to_keep]
  intersection_logic = ((sub_muscle_df[species_name, ] == "X") & 
                          !(sub_muscle_df[ref_name, ] == "-"))
  sub_muscle_df[species_name, 
                intersection_logic] = sub_muscle_df[ref_name, 
                                                    intersection_logic]
  column_to_keep = !(sub_muscle_df[species_name, ] == "X")
  
  return(sub_muscle_df[species_name, column_to_keep])
}

需要强调的简单例子:

AXCDXEFGG
ABCD—EFGH-
Transfrom AXCDXEFGG to ABCDEFGG


CDDEFGHP
ABCD—EFG
Transfrom CDDEFGHP to CDDEFGHP


CDDEXGHP
ABCD—EFG
Transfrom CDDEFGHP to CDDEXGHP

有更好的方法吗?

非常感谢您的帮助。

您可以使用 ==!=& 来更改列。

i <- which(x[1,] == "X" & x[2,] != "-")
#i <- x[1,] == "X" & x[2,] != "-" #Alternative
x[1,i] <- x[2,i]