R 确定文本是否包含在列中,然后与列标题连接
我正在收集一段时间以来患者的伤害调查数据。数据询问每位患者是否一侧或两侧疼痛,然后询问更多细节,这是一个文本框输入 我现在想1)测试每一位患者是否有文本,然后在每一列中2)如果文本确实存在,将身体区域的标题与侧边连接起来,然后在连接文本的结尾处用括号中的确切细节结束 我的数据库在70个变量上有500多个OB。我的数据的一个(小)示例是:R 确定文本是否包含在列中,然后与列标题连接,r,R,我正在收集一段时间以来患者的伤害调查数据。数据询问每位患者是否一侧或两侧疼痛,然后询问更多细节,这是一个文本框输入 我现在想1)测试每一位患者是否有文本,然后在每一列中2)如果文本确实存在,将身体区域的标题与侧边连接起来,然后在连接文本的结尾处用括号中的确切细节结束 我的数据库在70个变量上有500多个OB。我的数据的一个(小)示例是: head((RawData[,c(1,12:13)]), 5) Patient ID Elbow Elb
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>
head((原始数据[,c(1,12:13)]),5)
患者ID肘部详细信息
1A
2 B
3 C
4 D一侧疼痛右侧疼痛
5 E
我的预期产出将是:
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>
患者ID肘关节疼痛
1A
2 B
3 C
肘关节:一侧疼痛。(我右边疼)
5 E
这在R内可能吗?在Excel中,我可以简单地使用标题的文本并编写一个IF语句来评估文本是否存在。如果有,我将在下一列中连接文本。我希望使用R,考虑到我的数据库有多大,并且我使用它进行分析,所以任何帮助都将不胜感激
多谢各位 使用
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>
使用
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>
这是伟大的工作,我唯一的问题是,如果没有评论在“肘关节疼痛”的NA仍然打印在“肘关节详细信息”列。考虑到上面的例子,如果患者ID=“D”的“肘关节详细信息”下有NA,那么“肘关节疼痛”将读为:肘关节:一侧疼痛。不适用。@user2716568我做了一些更改,请查看我的更新答案。太好了,这是一个很棒的帮助。非常感谢你!这是伟大的工作,我唯一的问题是,如果没有评论在“肘关节疼痛”的NA仍然打印在“肘关节详细信息”列。考虑到上面的例子,如果患者ID=“D”的“肘关节详细信息”下有NA,那么“肘关节疼痛”将读为:肘关节:一侧疼痛。不适用。@user2716568我做了一些更改,请查看我的更新答案。太好了,这是一个很棒的帮助。非常感谢你!
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)
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>