我从数据列表的一列中提取了术语。现在这些术语在一个非结构化列表中(或者它是一个向量?不幸的是我不知道如何分辨。)。这就是现在开始的样子:
> data$C1
[1] "GERMANY" "GERMANY" "GERMANY" "GERMANY" "FRANCE" "FRANCE" "GERMANY" "ITALY"
为了进一步分析,我想将这些术语重新分配给我最初从中提取它们的数据列表的记录。在我的示例中,第一个记录包含三个术语,第二个两个,第三个和第四个两个,等等。所以这将是正确的输出:
> data$C1
[1] "GERMANY" "GERMANY" "GERMANY"
[2] "GERMANY"
[3] "FRANCE" "FRANCE"
[4] "GERMANY" "ITALY"
这就是我如何计算每条记录中的术语数:
> count <- sapply(data$C1, length)
> count
[1] 3 1 2 2
这就是我可以观察到第八项属于第四条记录的方式,例如:
> number <- rep(1:length(count), count)
> number
[1] 1 1 1 2 3 3 4 4
> number[8]
[1] 4
但是我怎样才能使用这些语句来实现所需的输出呢?再一次:我想将前三个术语分配给第一个记录,下一个术语(总体第四个)分配给第二个记录,接下来的两个(列表中的第 5 和第 6 个)分配给第三个记录,第七和八一到第四的记录等等。这怎么办?
非常感谢您!
编辑:
我将许多制表符分隔的文本文件导入到 R 中,这将它们变成了一个大数据列表。有 55 列(其中之一是 data$C1。),每个文本文件最多有 501 行(标题加上 500 条记录)。data$C1 包含地址字符串。我将它们拆分为单个地址并从中提取国家名称。为了更清楚地区分原始列和非结构化列表,我重命名了它们。
> data$C1 #original before extraction (each line is a new record)
[1] "UNIV POTSDAM,DEPT PHYS,D-14415 POTSDAM,GERMANY; UNIV OLDENBURG,DEPT CHEM,D-26111 OLDENBURG,GERMANY; TECH UNIV CAROLO WILHELMINA BRAUNSCHWEIG,INST ORGAN CHEM,D-38106 BRAUNSCHWEIG,GERMANY"
[2] "TECH UNIV BERLIN,FACHBEREICH MATH,D-10623 BERLIN,GERMANY"
[3] "UNIV GRENOBLE 1,F-38041 GRENOBLE,FRANCE; UNIV PARIS 06,PARIS,FRANCE"
[4] "UNIV AUGSBURG, FACHBEREICH PHYS, D-86135 AUGSBURG, GERMANY; JOINT RES CTR ISPRA, MARINE ENVIRONM UNIT, I-21020 ISPRA, ITALY"
...
这是提取的术语的当前输出:
C1a
[1] “德国” “德国” “德国” “德国” “法国” “法国” “德国” “意大利”
...
这将是我正在寻找的正确输出:
> C1a #extracted terms
[1] "GERMANY" "GERMANY" "GERMANY"
[2] "GERMANY"
[3] "FRANCE" "FRANCE"
[4] "GERMANY" "ITALY"
...
这八个元素只是数据列表开头/顶部的示例。它的四个记录包含八个提取的术语:
> tapply(C1a, number, c)
Error in tapply(data$C1, number, c) : all arguments must have the same length
> length(number)
[1] 4
> length(data$C1)
[1] 4
> length(C1a)
[1] 8
可以使用其他列之一来重新分配术语吗?它是 data$UT(唯一文章标识符),每条记录都有一个唯一的。值的示例是:
WOS:000300676300055
WOS:A1995QQ99100006
请问有人能帮我实现正确的输出吗?