用R提取DF colum中的唯一值序列

时间:2016-12-09 10:19:45

标签: r dataframe subset

我有以下数据框:

Col1 Col2
1    A
1    B
1    C
2    A
2    B
2    C
3    D
3    B
3    C
3    F
4    A
4    B
4    C

我想从Col2(特定总线路径的实际停靠点)中提取unque序列向量(总线停止序列),其中每个序列由R中的Col1(相应的总线路径ID)定义。相同的多次出现序列并不重要。因此,所需的输出是:

A, B, C(在Col1 = 1,2和4的情况下)和 D, B, C, F(如果Col1 = 3)

2 个答案:

答案 0 :(得分:2)

您可以根据路线ID的向量分割公交车站的矢量。这将返回一个字符向量列表,您可以在其上调用unique以删除重复的向量(保留第一次出现)。

通过toString对每个向量调用sapply,然后将向量列表转换为以逗号分隔的字符串向量。

res <- sapply(unique(split(df$Col2, df$Col1)), toString)
print(res)

答案 1 :(得分:0)

根据您的问题,我了解您需要每个col1 id的唯一序列。为了测试我改变了你的数据(我使用了data.table包)。您可以尝试以下内容:

require(data.table)
df <- fread('Col1 Col2
              1    A
              1    B
              1    C
              2    A
              2    B
              2    C
              1    A
              1    B
              1    C
              3    D
              3    B
              3    C
              3    F
              1    A
              1    F
              1    C
              4    A
              4    B
              4    C')

在您的情况下,如果您的数据框被调用,请执行setDT(df)将其转换为数据表。 并从此数据表中选择Col2中的唯一序列:

df[, .(list(Col2), Col1), by = rleid(Col1)][,.(Sequence = unique(V1)), by = Col1]

给出了:

    Col1 Sequence
1:    1    A,B,C
2:    1    A,F,C
3:    2    A,B,C
4:    3  D,B,C,F
5:    4    A,B,C

该命令的作用如下: Fist,对于Col1中的每个ID,我在Col2中得到序列(我使用rleid函数来识别Col1中的连续ID)。然后,我按每个Col1值选择唯一序列。