我从数据列表的一列中提取了术语。现在这些术语都在一个非结构化的列表中(或者它是一个向量?我不知道如何告诉它。)。 这就是现在的开头:
> 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
但是如何使用这些语句来实现所需的输出? 再一次:我想将前三个术语分配到第一个记录,下一个术语(第四个整体)分配给第二个记录,接下来的两个(列表中的第五个和第六个)到第三个记录,第七和第八至第四记录等 怎么办呢?
非常感谢你!
修改
我将许多制表符分隔的文本文件导入到R中,这将它们转换为一个大数据列表。共有55列(其中一列是数据$ 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
是否可以使用其他列之一来重新分配条款?它是数据$ UT(唯一文章标识符),每条记录都有一个唯一的记录。值的示例是:
WOS:000300676300055
WOS:A1995QQ99100006
请问有谁能帮助我达到正确的输出吗?
答案 0 :(得分:1)
我建议:
tapply(data$C1,number,c)
获得的结果:
$`1`
[1] "GERMANY" "GERMANY" "GERMANY"
$`2`
[1] "GERMANY"
$`3`
[1] "FRANCE" "FRANCE"
$`4`
[1] "GERMANY" "ITALY"
这会将连接(c
)函数应用于data$C1
中共享公共值number
的元素。结果是一个列表,所以使用双括号来引用它的元素(即[[1]],[[2]],[[3]],[[4]])。
希望这会有所帮助:)