保留 R 中 2 个字符向量的唯一排名值
Keep unique ranked values from 2 character vectors in R
我有两个长度为 5 的字符向量:
x <- c("B","A","D","K","F")
y <- c("A","C","D","F","E")
这些向量的特征如下:
- 每个向量都是有序的(例如,在向量
x
中,元素 "B"
比 "A"
更重要)
- 每个向量中没有重复项,但其中可能是重复项(如本例中的情况)
我想要的是"merge"这2个向量以获得一个新向量z
长度为5其中包含最重要的[=向量 x
和 y
的 55=] 非重复 个元素,在平局的情况下优先考虑 x
。
更清楚地说,我的程序的逻辑应该如下工作:
- 取
x
和y
的第一个元素:如果不一样,就放在z
里面
- 取
x
和 y
的第二个元素:如果 z
中已经有一个值,则忽略它。否则,把它放进去。
另一种方法是:如果有一个值存储在 x
或 y
中的较高位置,请忽略它。否则,将其放入 z
.
- 转到下一个位置并再次执行 2,将每个值与
x
和 y
中较高位置的所有值进行比较。
- 在
length(z)==5
时停止
在我的示例中,它将按如下方式工作:
- 把
B
和A
放在z
里面
- 将
C
放入z
- 将
D
放入z
(现在长度为4)
- 我们现在有值
K
和 F
:如果我们把两者都放,length(z)
将是 6,所以只取 K
因为它在 x
(优先级)
生成的向量将是 z = c("B","A","C","D","K")
。
我可以转换列表或其他任何形式的向量,但我想避免使用循环。
这是一个解决方案:
x <- c("B","A","D","K","F")
y <- c("A","C","D","F","E")
df=(t(data.frame(x,y)))
(result=unique(as.vector(df))[1:5])
[1] "B" "A" "C" "D" "K"
感谢详细的解释。
我有两个长度为 5 的字符向量:
x <- c("B","A","D","K","F")
y <- c("A","C","D","F","E")
这些向量的特征如下:
- 每个向量都是有序的(例如,在向量
x
中,元素"B"
比"A"
更重要) - 每个向量中没有重复项,但其中可能是重复项(如本例中的情况)
我想要的是"merge"这2个向量以获得一个新向量z
长度为5其中包含最重要的[=向量 x
和 y
的 55=] 非重复 个元素,在平局的情况下优先考虑 x
。
更清楚地说,我的程序的逻辑应该如下工作:
- 取
x
和y
的第一个元素:如果不一样,就放在z
里面
- 取
x
和y
的第二个元素:如果z
中已经有一个值,则忽略它。否则,把它放进去。
另一种方法是:如果有一个值存储在x
或y
中的较高位置,请忽略它。否则,将其放入z
. - 转到下一个位置并再次执行 2,将每个值与
x
和y
中较高位置的所有值进行比较。 - 在
length(z)==5
时停止
在我的示例中,它将按如下方式工作:
- 把
B
和A
放在z
里面
- 将
C
放入z
- 将
D
放入z
(现在长度为4) - 我们现在有值
K
和F
:如果我们把两者都放,length(z)
将是 6,所以只取K
因为它在x
(优先级)
生成的向量将是 z = c("B","A","C","D","K")
。
我可以转换列表或其他任何形式的向量,但我想避免使用循环。
这是一个解决方案:
x <- c("B","A","D","K","F")
y <- c("A","C","D","F","E")
df=(t(data.frame(x,y)))
(result=unique(as.vector(df))[1:5])
[1] "B" "A" "C" "D" "K"
感谢详细的解释。