楼主: EveIOU
1510 11

[问答] 求助,数据比对、合并 [推广有奖]

  • 1关注
  • 0粉丝

博士生

2%

还不是VIP/贵宾

-

威望
0
论坛币
183 个
通用积分
59.2896
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
3004 点
帖子
87
精华
0
在线时间
195 小时
注册时间
2011-11-18
最后登录
2024-2-22

相似文件 换一批

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币

急求大神指点,以下是一个含3列的数据框(取自TCGA临床数据),第1行是列名,想要将这3列数据合并在第4列(新建1列,列名为Outcome),规则如下:1.认为Unknown与Not Available同义,并且级别最低,如果某一行数据在三列中不同,取Unknown或Not Available以外的某列数据放在第4列。2.如果Unknown或Not Available与Complete Remission/Response、Partial Remission/Response、Stable Disease、Progressive Disease等值在某一个格子内同时出现,认为是原始记录错误,忽略Unknown或Not Available。3.如果Complete Remission/Response、Partial Remission/Response、Stable Disease、Progressive Disease这4种结果同时出现,无论是某一列内(记录错误)还是3列间,按照Complete Remission/Response > Partial Remission/Response > Stable Disease > Progressive Disease的优先级保留唯一的值。敬请大神指点,多谢!

follow_ups.follow_up.followup_treatment_successfollow_ups.follow_up.primary_therapy_outcome_successprimary_therapy_outcome_success
Complete Remission/ResponseComplete Remission/ResponseComplete Remission/Response
Complete Remission/Response;Complete Remission/ResponseComplete Remission/Response;Complete Remission/ResponseNot Available
Not Available
Complete Remission/Response;Complete Remission/ResponseComplete Remission/Response;Complete Remission/ResponseNot Applicable
Progressive DiseaseProgressive DiseaseNot Available
Complete Remission/ResponseComplete Remission/ResponseUnknown
UnknownUnknownNot Available
Complete Remission/ResponseComplete Remission/ResponseComplete Remission/Response
Unknown
Not Available;Complete Remission/ResponseComplete Remission/Response;Complete Remission/ResponseNot Available
Stable DiseaseStable DiseaseNot Available
Not AvailableProgressive DiseaseNot Available
Complete Remission/Response;Complete Remission/ResponseComplete Remission/Response;Complete Remission/ResponseNot Available
Complete Remission/ResponseComplete Remission/ResponseComplete Remission/Response
Not ApplicableNot AvailableNot Available
Not AvailableComplete Remission/ResponseNot Available
Complete Remission/ResponseNot ApplicableNot Available
Not AvailableNot AvailableNot Available
Complete Remission/Response;Complete Remission/Response;Progressive DiseaseComplete Remission/Response;Not Available;Complete Remission/ResponseNot Available
Progressive DiseaseComplete Remission/ResponseComplete Remission/Response
Complete Remission/ResponseComplete Remission/ResponseComplete Remission/Response
Not AvailableProgressive DiseaseNot Available
Complete Remission/Response
Complete Remission/ResponseComplete Remission/ResponseNot Available
Complete Remission/Response;Complete Remission/ResponseComplete Remission/Response;Complete Remission/ResponseNot Available
Not AvailableNot AvailableNot Available
Not Available;UnknownNot Available;Complete Remission/ResponseNot Available
Not AvailableNot AvailableNot Available
Stable DiseaseStable DiseaseStable Disease

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:progressive Applicable Available treatment response 紧急求助!数据比对、合并

沙发
caozhaowen 在职认证  发表于 2020-2-2 01:56:02 |只看作者 |坛友微信交流群
我这段程序有点笨,但是可以实现你要的功能。[em07][em07]

  1. library(readxl)
  2. data_web <- read_excel("D:/data_web.xlsx")
  3. data_web$outcome <- "unknown"
  4. library(stringr)
  5. n <- NROW(data_web)
  6. for (i in 1:n) {
  7.     if(sum(str_detect(string=data_web[i,],pattern = "Progressive Disease"),na.rm=T)!=0)
  8.        { data_web$outcome[i] <-"Progressive Disease"}
  9.       if (sum(str_detect(string=data_web[i,],pattern = "Stable Disease"),na.rm=T)!=0)
  10.         {  data_web$outcome[i] <-"Stable Disease" }
  11.       if (sum(str_detect(string=data_web[i,],pattern = "Partial Remission/Response"),na.rm=T)!=0)
  12.       {  data_web$outcome[i] <- "Partial Remission/Response"}
  13.       if (sum(str_detect(string=data_web[i,],pattern = "Complete Remission/Response"),na.rm=T)!=0)
  14.        { data_web$outcome[i] <- "Complete Remission/Response"}
  15. }
复制代码
已有 1 人评分论坛币 收起 理由
cheetahfly + 10 热心帮助其他会员

总评分: 论坛币 + 10   查看全部评分

使用道具

藤椅
EveIOU 发表于 2020-2-2 11:58:05 |只看作者 |坛友微信交流群
caozhaowen 发表于 2020-2-2 01:56
我这段程序有点笨,但是可以实现你要的功能。
多谢朋友指点,我执行您的代码后,最后一列(Outcome列)都是unknown,能否请您再看一下?
另外,我想应该再增加一条规则(高于前面的优先级),如果三列中有两列一致,另一列不一致,认为不一致的可能是记录错误,取两列一致的值(Unknown与Not Available除外),例如:Complete Remission/Response、        Not Applicable、Not Available,取Complete Remission/Response;Partial Remission/Response、Complete Remission/Response、Partial Remission/Response,取Partial Remission/Response
希望您:
1.考虑新增规则和之前规则,重新设计代码。
2.若所有规则可以同时满足,也请单独考虑新增规则,设计代码。(前面的优先级规则很可能引入误差)
3.若不能同时满足优先级规则,请单独考虑新增规则,设计代码。

使用道具

板凳
caozhaowen 在职认证  发表于 2020-2-2 12:12:52 |只看作者 |坛友微信交流群
EveIOU 发表于 2020-2-2 11:58
多谢朋友指点,我执行您的代码后,最后一列(Outcome列)都是unknown,能否请您再看一下?
另外,我想应 ...
怎么会,你仔细看懂代码,然后再执行。

QQ图片20200202121034.png

使用道具

报纸
caozhaowen 在职认证  发表于 2020-2-2 12:14:37 |只看作者 |坛友微信交流群
EveIOU 发表于 2020-2-2 11:58
多谢朋友指点,我执行您的代码后,最后一列(Outcome列)都是unknown,能否请您再看一下?
另外,我想应 ...
若要增加规则,可仿此加代码即可。

使用道具

地板
caozhaowen 在职认证  发表于 2020-2-2 12:15:27 |只看作者 |坛友微信交流群
执行后代结果见截图

QQ图片20200202121034.png (91.23 KB)

QQ图片20200202121034.png

使用道具

7
EveIOU 发表于 2020-2-2 13:59:01 |只看作者 |坛友微信交流群
caozhaowen 发表于 2020-2-2 12:14
若要增加规则,可仿此加代码即可。
多谢您及时回复!除了前两行以外,剩下的全用您的代码,一点没改,结果见截图。我是Windows系统,请教一下问题出在哪里?另外,之前的优先级规则可能引入人为误差(选择偏倚),我想将优先级规则更改为以下规则:如果三列中有两列一致,另一列不一致,认为不一致的可能是记录错误,取两列一致的值(Unknown与Not Available除外),例如:Complete Remission/Response、Not Applicable、Not Available,取Complete Remission/Response;Partial Remission/Response、Complete Remission/Response、Partial Remission/Response,取Partial Remission/Response
麻烦您:按照新规则再设计代码,再次感谢!

data_web <- dat.Clinic[, 13:15]
View(data_web)
data_web$outcome <- "Unknown"
library(stringr)
n <- NROW(data_web)
for (i in 1:n) {
  if(sum(str_detect(string=data_web[i,],pattern = "Progressive Disease"),na.rm=T)!=0)
  { data_web$outcome <-"Progressive Disease"}
  if (sum(str_detect(string=data_web[i,],pattern = "Stable Disease"),na.rm=T)!=0)
  {  data_web$outcome <-"Stable Disease" }
  if (sum(str_detect(string=data_web[i,],pattern = "Partial Remission/Response"),na.rm=T)!=0)
  {  data_web$outcome <- "Partial Remission/Response"}
  if (sum(str_detect(string=data_web[i,],pattern = "Complete Remission/Response"),na.rm=T)!=0)
  { data_web$outcome <- "Complete Remission/Response"}
}
View(data_web)



2020-02-02_134957.png (56.39 KB)

2020-02-02_134957.png

使用道具

8
caozhaowen 在职认证  发表于 2020-2-2 15:01:05 |只看作者 |坛友微信交流群
我是用你网页上文件粘到excel中然后读入做的。不知你str_detect(string=data_web[20,],pattern = "Progressive Disease")这名代码执行的结果是什么,不妨截图来看一下。把20换成其它数字,,如15,17,19,等,执行一下看又是什么结果。

使用道具

9
EveIOU 发表于 2020-2-2 18:04:54 |只看作者 |坛友微信交流群
caozhaowen 发表于 2020-2-2 15:01
我是用你网页上文件粘到excel中然后读入做的。不知你str_detect(string=data_web[20,],pattern = "Progress ...
多谢!数据已传到网盘,链接: https://pan.baidu.com/s/13ljnN0I4oFfpcz0_wDLP_g 提取码: fe2u
请用read.table读取txt文件吧。将13-15这3列数据合并在新建的Outcome列,新规则(改了原来考虑优先级的第3条)如下:
1.认为Unknown与Not Available同义,并且级别最低,如果某一行数据在三列中不同,取Unknown或Not Available以外的某列数据。
2.如果Unknown或Not Available与Complete Remission/Response、Partial Remission/Response、Stable Disease、Progressive Disease等值在某一个格子内同时出现,认为是原始记录错误,忽略Unknown或Not Available。
3.如果三列中有两列一致,另一列不一致,认为不一致的可能是记录错误,取两列一致的值(Unknown与Not Available除外),例如:Complete Remission/Response、Not Applicable、Not Available,取Complete Remission/Response;Partial Remission/Response、Complete Remission/Response、Partial Remission/Response,取Partial Remission/Response。如果三列完全不一样(认为Unknown与Not Available一样),赋值为DEL或系统允许的表示删除的值,例如83行的Complete Remission/Response、 Partial Remission/Response、 Not Available,无法判断前两个值哪一个正确。
4. Outcome列中的结果都用简写吧: Complete Remission/Response简写为CR、Partial Remission/Response简写为PR、Stable Disease简写为SD、Progressive Disease简写为PD。

您所建议的,我执行后结果如图,都是3个FALSE,但相应的行是有相应的pattern的 2020-02-02_175821.png

使用道具

10
caozhaowen 在职认证  发表于 2020-2-3 00:38:34 |只看作者 |坛友微信交流群
EveIOU 发表于 2020-2-2 18:04
多谢!数据已传到网盘,链接: https://pan.baidu.com/s/13ljnN0I4oFfpcz0_wDLP_g 提取码: fe2u
请用read ...
我也不知为啥您结是这样。我还是用的一样的代码。
  1. library(readxl)
  2. dat_Clinic_1 <- read_excel("dat.Clinic.1.xlsx")
  3. data_web <- dat_Clinic_1[,13:15]
  4. data_web$outcome <- "unknown"
  5. library(stringr)
  6. n <- NROW(data_web)
  7. for (i in 1:n) {
  8.     if(sum(str_detect(string=data_web[i,],pattern = "Progressive Disease"),na.rm=T)!=0)
  9.        { data_web$outcome[i] <-"Progressive Disease"}
  10.       if (sum(str_detect(string=data_web[i,],pattern = "Stable Disease"),na.rm=T)!=0)
  11.         {  data_web$outcome[i] <-"Stable Disease" }
  12.       if (sum(str_detect(string=data_web[i,],pattern = "Partial Remission/Response"),na.rm=T)!=0)
  13.       {  data_web$outcome[i] <- "Partial Remission/Response"}
  14.       if (sum(str_detect(string=data_web[i,],pattern = "Complete Remission/Response"),na.rm=T)!=0)
  15.       { data_web$outcome[i] <- "Complete Remission/Response"}
  16. }     
复制代码



未标题-1.jpg

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-25 19:21