首页 > 解决方案 > 如果列包含字符串,如何将列标题添加到新列

问题描述

帮助!我正在尝试合并两个文件(两个文件的行数都相等~4,000),但一个有一个摘要列,另一个没有,我不知道该怎么做。抱歉,我是 R 新手。

我的逻辑是文件 B 上的 IF 语句,如果它的列等于“是”,它将列标题打印到一个也名为“All_results”的新列,然后通过“ID”和“All_results”合并两个文件。是否有任何建议的 R 函数来执行此操作?

*******文件A********

ID  All_results  cat  dog  fly
1  [cat, dog]     yes  yes  no
2  [cat]          yes  no  no
3  [cat, fly]     yes  no  yes
4  [dog]          no  yes  no
5  [dog, fly]     no  yes  yes

*****文件B******

ID  lion  rat  frog
1   yes   yes  no
2   yes   no   no
3   yes   no   yes
4   no    yes  no
5   no    yes  yes

预期结果******Merged_files********

ID  All_results         cat  dog  fly  lion  rat  frog
1  [cat,dog,lion,rat]   yes  yes  no    yes  yes  no
2  [cat,fly]            yes  no   no    yes  no   no
3  [cat, fly,lion,frog] yes  no   yes   yes  no   yes
4  [dog,rat]            no   yes  no    no   yes  no
5  [dog, fly,rat,frog]  no   yes  yes   no   yes  yes

标签: r

解决方案


我自己不是 R 的专业人士,但这给了我想要的结果。希望能帮助到你。

filea <- read.table( text = "ID  All_results  cat  dog  fly
1  \"[cat, dog]\"     yes  yes  no
2  \"[cat]\"          yes  no  no
3  \"[cat, fly]\"     yes  no  yes
4  \"[dog]\"          no  yes  no
5  \"[dog, fly]\"     no  yes  yes", header = TRUE)

fileb <- read.table(text = "ID  lion  rat  frog
                    1   yes   yes  no
                    2   yes   no   no
                    3   yes   no   yes
                    4   no    yes  no
                    5   no    yes  yes", header = TRUE)

fileab <- merge(filea[,-c(2)], fileb, by = "ID")

fileab$All_results <-  apply(fileab, 1, 
function(x) paste("[", paste(colnames(fileab)[x == "yes"], collapse = ","), "]", sep = ""))

产生这个结果

ID cat dog fly lion rat frog         All_results
1 yes yes  no  yes yes   no  [cat,dog,lion,rat]
2 yes  no  no  yes  no   no          [cat,lion]
3 yes  no yes  yes  no  yes [cat,fly,lion,frog]
4  no yes  no   no yes   no           [dog,rat]
5  no yes yes   no yes  yes  [dog,fly,rat,frog]

不区分大小写的更新:

插入这个:grepl("yes", x, ignore.case = T)

fileab$All_results <-  apply(fileab, 1, function(x) paste("[", 
paste(colnames(fileab)[grepl("yes", x, ignore.case = T)], collapse = ","), "]", sep = ""))

推荐阅读