R列上的字符串匹配

时间:2017-06-08 22:09:01

标签: r regex string

我的数据框有一个列,我试图在其上运行字符串匹配,然后在匹配时更新字符串。我尝试了几种方法,但似乎没有工作。我的框架如下所示。对于列“IntNames”第2行,我想用clin2代替“clin2 | clin3 | clin4”,而只用clin6代替row3“clin6 | clin7 | clin8 | clin9 | clin10”。我们的想法是只保留这些值的第一个元素。我感谢您的所有帮助和意见。

DECLARE @TestA TABLE (ID INT, X INT, Y INT, Dv_Data XML);
INSERT @TestA VALUES 
(101, 4, 5, '<U><V N="TTF">1</V><V N="MF">0</V><V N="ResultA">383.501</V></U>'),
(102, 4, 6, '<U><V N="TTF">0</V><V N="MF">1</V><V N="ResultA">383.601</V></U>');

SELECT *
FROM
(
    SELECT T.ID,
           T.X, 
           T.Y, 
           ColName = A.B.value('@N', 'VARCHAR(MAX)'), 
           ColVal = A.B.value('text()[1]', 'VARCHAR(MAX)')
    FROM @TestA AS T
    CROSS APPLY T.Dv_Data.nodes('U/V') AS A(B)
) AS T
PIVOT
(
    MAX(ColVal) FOR ColName IN ([TTF], [MF], [ResultA])
) AS P;

3 个答案:

答案 0 :(得分:2)

删除ifelse语句并使用substitution执行此任务:

myFrame$IntNames <- sub('\\|.*', '', myFrame$IntNames)

#   IntNames values1 values2
# 1    clin1     100      10
# 2    clin2     200       4
# 3    clin6     240       5

答案 1 :(得分:1)

您可以使用## Replicate your data myFrame = read.table(text="IntNames values1 values2 clin1 100 10 clin2|clin3|clin4 200 4 clin6|clin7|clin8|clin9|clin10 240 5", header=TRUE) myFrame$IntNames = sub("(\\.*?)\\|.*", "\\1", myFrame$IntNames) myFrame IntNames values1 values2 1 clin1 100 10 2 clin2 200 4 3 clin6 240 5 和正则表达式执行此操作。

<div>
<?php include 'tools/edit.php';?>
<form method="post">
<input type="submit" name="disable" value="Disable" />
<input type="submit" name="enable" value="Enable" />
</form>
</div>

答案 2 :(得分:1)

我们可以这样做(假设IntNames是一个字符向量):

myFrame$IntNames<- unlist(lapply(strsplit(myFrame$IntNames, "[|]"), `[[`, 1))