str_replace分配的数据...必须与现有数据兼容

l7wslrjt  于 2023-02-10  发布在  其他
关注(0)|答案(1)|浏览(128)

我有一个包含1,349,154百万行和3列(SKU、计数和州)的 Dataframe 。
我运行这段代码将所有"apples"示例替换为"Green Apples",它工作正常。
x1月1x)
然后我拆分数据并使用以下函数对其进行子集化:

hs1_df$sc <- str_split(hs1_df$SKU, fixed(" - "), n = 2, simplify = TRUE)

hs1_df <-subset(df, count==1)

我运行完全相同的代码,用"Green Apples"替换"apples",结果出现错误。
分配的数据...必须与现有数据兼容。
现有数据有631,580行。
分配的数据有1,263,160行。
"现有数据"与新数据框中的行计数匹配。
我期望代码在原始 Dataframe 和新 Dataframe 上运行得同样好。
我想我可能有一些空值或NA在那里,所以我把他们替换为:

df$SKU <- df$SKU %>% replace_na('missing')

我也试过改变函数,也得到了同样的错误,所以我知道我搞砸了一些东西,只是不知道是什么。
我看到其他帖子中出现了这个错误,但似乎它适用于广泛的情况。

92dk7w1h

92dk7w1h1#

您似乎混淆了示例中的 Dataframe 。第一行代码位于hs1_df上,但第二行代码基于df覆盖了它。然而,问题是str_split返回的是一个字符矩阵,您可以将其分配给一个变量。但是str_replace_all返回的是一个字符向量,它包含两个值,您试图将它们赋给一个变量。因此,当替换值的数量是要将其分配到的位置的两倍时,您会得到一个错误。您可以像我下面所做的那样,通过将str_replace_all的结果捕获为列表来解决这个问题。

library(stringr)

df <- data.frame(name = "FirstName-LastName")

df$name <- str_split(df$name, fixed("-"), n = 2, simplify = TRUE)

df$name <- list(str_replace_all(df$name, "FirstName", "MiddleName"))

df

                  name
1 MiddleName, LastName

相关问题