【发布时间】:2021-10-09 17:59:38
【问题描述】:
我有一个数据框,其中有一个名为 line_name 的列。 Line_name 具有用逗号分隔的字符串。 (例如“A、B、C”)
如果 pdl1_mono 列表中的任何字符串在 line_name 中,我希望该词出现在第一个。现在 Line_name 中的单词列表是按字母顺序排列的。基本上,我正在尝试更新 Line_name 列中字符串的顺序。
例如,如果 Line_name = "carboplatin,paclitaxel,pembrolizumab",由于 "pembrolizumab" 在 pdl1_mono 列表中,我想将其更新为 "pembrolizumab,carboplatin,paclitaxel"。
pdl1_mono <- c('atezolizumab', 'cemiplimab', 'durvalumab', 'nivolumab', 'nivolumab,ipilimumab',
'pembrolizumab')
df <- df %>%
mutate(
line_name = sub('^(.*),pembrolizumab', 'pembrolizumab,\\1', line_name),
line_name = sub('^(.*),nivolumab', 'nivolumab,\\1', line_name)
)
我可以使用 sub() 函数对 pdl1_mono 列表中的每个项目进行更新。我们可以使用一些动态函数来更新 Line_name 列,而不是手动重复每个项目吗?我尝试使用地图,但我认为这是不对的。一直报错
df1 <- df %>%
mutate(
line_name =
case_when(str_detect(line_name, paste(pdl1_mono, collapse = "|")) ~ map(pdl1_mono,
sub(paste0("^(.*),",.,"'"), paste0(.,",\\1"), line_name)),
TRUE ~. ))
这是用于测试的示例数据集
structure(list(patient_id = c("FB686A25501E9", "F8B1ED05646B2",
"FC3D22E4CC73C", "F26230CDC7E74", "F22AF8C94E657", "FAF785C1A151A",
"F6E1B8F6F0EA9", "F428FFA3E8E61", "F6B57AFAF6B24", "FA7560BD1D1AD",
"FAAC879CAF38F", "F1C824D17FCB9", "F25182C921986", "F890B3306D38F",
"FF26E35E93510", "FB4FB81ACD59D", "FA32928EF3D5B", "FA7D9EBBD7483",
"FF3F362DE9D91", "F0BA038C8DD49"), line_name = c("bevacizumab,carboplatin,pemetrexed",
"dabrafenib,trametinib", "gemcitabine,paclitaxel", "nivolumab",
"carboplatin,paclitaxel protein-bound", "cisplatin,etoposide",
"paclitaxel,pertuzumab,trastuzumab", "carboplatin,paclitaxel protein-bound,pembrolizumab",
"carboplatin,gemcitabine", "afatinib,carboplatin,pembrolizumab,pemetrexed",
"paclitaxel protein-bound", "bevacizumab,carboplatin,pemetrexed",
"carboplatin,docetaxel", "cisplatin,etoposide", "carboplatin,paclitaxel protein-bound",
"carboplatin,pemetrexed", "nivolumab", "afatinib", "carboplatin,paclitaxel",
"bevacizumab,carboplatin,pemetrexed")), row.names = c(NA, -20L
), class = c("tbl_df", "tbl", "data.frame"))
【问题讨论】:
-
Rtistic将它们分散到多行并将它们视为有序因子会更多。为什么他们需要在一个字符串中? -
@coffeinjucky 这是一张大桌子的一部分。 Line_name 可能是一长串字符串。而且我必须按排序顺序将其显示在各种表格和图表中。
-
我认为你想要
%in%而不是map,但我的dplyr不是很好。