【发布时间】:2017-02-12 08:37:01
【问题描述】:
数据
我有一个包含如下数据的文本文件:
PMID- 26460049
AB - Psoriasis is an inflammatory skin disease affecting 2–3% of the population.
AID - 201509971 [pii]
AID - 10.1073/pnas.1509971112 [doi]
PMID- 26999594
AB - Psoriasis is an autoimmune skin disease that is associated with aberrant activity of immune cells and keratinocytes.
AID - PONE-D-15-54115 [pii]
AID - 10.1371/journal.pone.0151913 [doi]
有更多的字段和记录,但模式是有一个变量名、一个“-”分隔符、一些文本,可能是多行长,然后是数据值。
期望的输出
我想创建一个这样的数据框:
PMID AB AID AID
26460049 Psoriasis is... 201509971 [pii] 10.1073/pnas.1509971112 [doi]
26999594 Psoriasis is... PONE-D-15-54115 [pii] 10.1371/journal.pone.0151913 [doi]
基本上是换位并将“-”分隔符识别为变量名和数据值之间的分界线。
问题
如何转置我的文件并分离出这些数据的变量和数据值?
【问题讨论】:
-
请您使用
dput(your_data)提供您的数据 -
看起来
-既作为列分隔符又作为字符字段的一部分出现。如果您在-列标识符(即-)之后有一个空格,那么@tobiasegli_te 的答案将起作用。使用read.csv("/dir/data.csv", sep="- ")会更短,前提是您的列由-分隔,而不是-。 -
@MikeRSpencer,我认为
read.csv只能接受单个字符sep参数。我也不确定它将如何处理数据中的空行。 -
关于缺失的行非常真实!我并没有太在意。我关于
-显示为数据字符的评论仍然有效。 -
@MikeRSpencer 绝对有效,正如您所说,
sep = "- "会很棒,如果只有read.csv会接受它。我选择了readLines,然后是strsplit,这可能会慢很多,而且肯定更“笨拙”。
标签: r text dataframe data-conversion