【发布时间】:2016-01-05 17:16:06
【问题描述】:
str_split 的输出生成一个列表。列表列表如何折叠成扁平列表?
请参阅下面的示例数据:
library(magrittr)
library(dplyr)
url='https://github.com/macarthur-lab/clinvar/raw/master/output/clinvar.tsv.gz'
w=readr::read_tsv(url) #warnings can be safely ignored
w<-w %>% filter(grepl('LabCorp',all_submitters))
#traits are separated by semicolons
ttd<-stringr::str_split(w$all_traits,pattern = ';')
#there are several traits per row from str_split
ttd.l<-sapply(ttd,length)
#sample
ttd[[77]]
[1] "Hereditary cancer-predisposing syndrome"
[2] "Lynch syndrome"
[3] "Lynch Syndrome"
[4] "Neoplastic Syndromes, Hereditary"
[5] "Hereditary non-polyposis colon cancer"
#how to put all 'all-traits' into single vector
这似乎不行:
traits<-lapply(ttd,c)
table(traits)
编辑:简单 unlist(ttd) 的问题是我需要在 w$measureset_id 中保留行的 ID
像这样:
out=data.frame()
for (i in 1:length(ttd)) {
print(i)
#unlist(ttd[[i]])
one<-data.frame(id=w[i,'measureset_id']
,trait=unique(toupper(unlist(ttd[[i]]))))
out<-rbind(out,one)
}
头(出,5)
measureset_id trait
1 36663 CARDIAC ARRHYTHMIA
2 36663 ARRHYTHMIA
3 12779 PHEOCHROMOCYTOMA/PARAGANGLIOMA
4 12779 PHEOCHROMOCYTOMA
5 12779 PARAGANGLIOMAS 4
【问题讨论】:
-
unlist做你想做的事吗? -
unlist()会做你需要的吗? -
unlist()是你想要的吗? (冷嘲热讽)。或者实际上,你可以做ttd <- scan(text = w$all_traits, sep = ";", what = ""),而不是拆分 -
OP:可重现的示例很有用,但将来尝试指定您正在使用的包(readr 和 dplyr)。其他:添加评论时,它确实建议您不要使用评论来回答问题。
-
好的,鉴于 OP 想要的其他信息,我正在添加新的答案。