我有一个关于根据基于两列的组合更改 data.frame 中的字符值的问题。我将尝试举一个例子来说明 data.frame 的外观
data <- data.frame(A1 = c("A", "T", "C"), A2 = c("C", "G", "T"),
Ind1 = c("AA", "TG", "TT"), Ind2 = c("CA", "GT", "CT"),
Ind3 = c("AC", "GG", "TC"))
> data
A1 A2 Ind1 Ind2 Ind3
1 A C AA CA AC
2 T G TG GT GG
3 C T TT CT TC
A1
我想更改从 Ind1 到 Ind3 的列中的值,这些值与列和的可能组合不匹配A2
,例如在第一行中,A1
是 anA
和A2
是 a ,C
因此可能的组合将是AA
, AC
, CC
(基于A1
, 和 的组合A2
以该顺序)。因此 Ind2 应该AC
代替CA
。
所需的输出将是这样的:
> data
A1 A2 Ind1 Ind2 Ind3
1 A C AA AC AC
2 T G TG TG GG
3 C T TT CT CT
我已经尝试过,switch
但它不起作用。任何帮助,将不胜感激。谢谢
如果我正确理解了这个问题,并假设您只有两封信需要处理,那么只有一种情况需要编辑;也就是说,字母顺序相反,即“A2A1”。所有其他情况都是正确的。所以你可以通过一个简单的
ifelse
变异来管理这个问题。为了回应OP评论,使用“真实”数据:
除了 Peter 非常聪明的技巧之外,如果您想在基本 R 中寻求更硬编码的解决方案,您可以根据 A1 和 A2 中的顺序
split
逐行排列字符串,然后再返回。这与要订购的字母数量无关:sort
paste
我们可以使用正则表达式模式来测试组合的有效性,然后如果无效则反转字符串: