有比较字符列的功能吗?

问题描述 投票:0回答:1

我对 R 相当陌生,我正在尝试比较两个字符列。

我有一个包含两列和 5000 多行物种名称的文件。柱子的长度不同,并且许多物种名称重复。

第 1 列(蜜蜂)是旧的物种列表。第 2 列(科学名称)是更新的物种列表。我需要测量每个物种的大小,因此我希望更新的列表包含两列中的每个物种一次。

我需要的不仅仅是“等于”或“不等于”;我需要看看与其他列相比,每列中缺少哪些物种。

本质上,我需要每一列都是唯一物种(不重复)的列表,并查看其中一列是否有另一列没有的物种(我希望我能清楚地阐明这一点)。

我最初使用 unique() 函数来获取不重复的名称列表。然后,我打算比较每列的列表,但输出的格式不是可以轻松手动传输到 .csv 的格式。 (它列出了 1“物种名称”2“物种名称”等,我需要连续每个物种,没有数字或引号)。

我发现的大多数代码仅适用于数值数据。

此后我尝试了以下方法:

df %>%    mutate(comparison = if_else(     as.character(df$Bees) == as.character(df$scientificName), "equal", "different"))

我收到错误:“比较”大小必须为 5386 或 1,而不是 0。

-----

df$Match <- as.character(df$Bees) == as.character(df$scientificName)

这里的错误是:

Error in $<-: ! Assigned data as.character(df$Bees) == as.character(df$scientificName)must be compatible with existing data. ✖ Existing data has 5386 rows. ✖ Assigned data has 0 rows. ℹ Only vectors of size 1 are recycled. Caused by error invectbl_recycle_rhs_rows(): ! Can't recycle input of size 0 to size 5386.

-----

library(vecsets) eg_data <- data.frame(   col1 = df$Bee,   col2 = df$scientificName,   stringsAsFactors=FALSE)  eg_data$name1_diff1_2 <- mapply(vsetdiff, strsplit(eg_data$col1, split = ""),  strsplit(eg_data$col2, split = "")) eg_data$name2_diff2_1 <- mapply(vsetdiff, strsplit(eg_data$col2, split = ""),  strsplit(eg_data$col1, split = ""))

此输出的每个字符都是它自己的字符串。

-----

setdiff(df$Bee, df$scientificName)

这个输出是我得到的最接近的,它确实显示了不同的物种,但它没有告诉我哪里差异在哪里(即哪一列有它,哪一列没有)

-----

anti_join(df$Bee, df$scientificName, by = "text")

错误消息是

Error in UseMethod("anti_join") :    no applicable method for 'anti_join' applied to an object of class "character"

r dataframe compare comparison character
1个回答
0
投票

命令

df$Match <- as.character(df$Bees) == as.character(df$scientificName)
要求R对两个值进行比较。
==
运算符的结果始终是长度为 1 的逻辑向量,但看起来调用的输出长度为 0(可能为 NULL?)。所以它不能在
nrow(df)
上回收向量。重新运行为:

x <- as.character(df$Bees) == as.character(df$scientificName)

如果有错误请告诉我们。

© www.soinside.com 2019 - 2024. All rights reserved.