确定文本是否包含在列中,然后与列标题

时间:2018-02-22 04:59:35

标签: r

随着时间的推移,我正在收集患者的伤害调查数据。数据询问每位患者是否在一侧或两侧疼痛,然后要求进一步详细说明,这是一个文本框输入。

我现在希望1)测试每个患者是否存在文本,然后2)如果文本确实存在,则将身体区域的标题与侧面连接起来3)完成括号中的确切细节,这个连接文本的结尾。

我的数据库在70个变量上有超过500个障碍物。我的数据的一个(小)示例是:

head((RawData[,c(1,12:13)]), 5)
   Patient ID    Elbow                       Elbow Details
1  A             <NA>                             <NA>
2  B             <NA>                             <NA>
3  C             <NA>                             <NA>
4  D         Pain on One Side             Pain on my right
5  E             <NA>                             <NA>

我的预期输出是:

  Patient ID    Elbow Soreness                      
    1  A             <NA>                             
    2  B             <NA>                             
    3  C             <NA>                             
    4  D         Elbow: Pain on One Side. (Pain on my right)                      
    5  E             <NA>            

这可能在R内吗?在Excel中,我可以简单地使用标题的文本并编写IF语句来评估文本是否存在。如果是这样,我会在下一栏中连接文本。我希望使用R,考虑到我的数据库有多大,我将其用于分析,所以任何帮助都将不胜感激!

谢谢。

1 个答案:

答案 0 :(得分:2)

使用dplyr

这样的事情
library(dplyr);
df %>%
    mutate(Elbow_soreness = ifelse(
        Elbow == "<NA>",
        NA,
        sprintf("Elbow: %s (%s)", Elbow, Elbow_Details))) %>%
    select(Patient_ID, Elbow_soreness);
#  Patient_ID                             Elbow_soreness
#1          A                                       <NA>
#2          B                                       <NA>
#3          C                                       <NA>
#4          D Elbow: Pain on One Side (Pain on my right)
#5          E                                       <NA>

或在基地R:

df$Elbow_soreness <- ifelse(
    df$Elbow == "<NA>",
    NA,
    sprintf("Elbow: %s (%s)", df$Elbow, df$Elbow_Details));
df[, c(1, 4)];

样本数据

df <- read.table(text =
    "Patient_ID    Elbow                       Elbow_Details
A             NA                             NA
B             NA                             NA
C             NA                             NA
D         'Pain on One Side'             'Pain on my right'
E             NA                             NA", header = T)

更新

要解决缺少Elbow_soreness条目的评论和帐户,您可以使用两个嵌套ifelse条件:

df <- read.table(text =
    "Patient_ID    Elbow                       Elbow_Details
A             NA                             NA
B             NA                             NA
C             NA                             NA
D         'Pain on One Side'             'Pain on my right'
E         'Pain on One Side'                 NA
F             NA                             NA", header = T)


library(dplyr);
df %>%
    mutate(Elbow_soreness = ifelse(
        is.na(Elbow),
        NA,
        ifelse(
            is.na(Elbow_Details),
            sprintf("Elbow: %s", Elbow),
            sprintf("Elbow: %s (%s)", Elbow, Elbow_Details)))) %>%
    select(Patient_ID, Elbow_soreness);
#  Patient_ID                             Elbow_soreness
#1          A                                       <NA>
#2          B                                       <NA>
#3          C                                       <NA>
#4          D Elbow: Pain on One Side (Pain on my right)
#5          E                    Elbow: Pain on One Side
#6          F                                       <NA>