我有以下数据框:
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)
答案 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值选择唯一序列。