gpt4 book ai didi

r - 获取 Dataframe 的元素数量等于 List - R 中的元素数量

转载 作者:行者123 更新时间:2023-12-02 14:31:02 28 4
gpt4 key购买 nike

我有一个具有以下结构的数据框:

DataFrame$Fruit
Apple
Banana
Apple
Mango
Banana

等等

我想使用数据(例如计算数字,但也进行其他操作),其中的水果在某些给定数组中是相同的:

keepFruit = c('苹果', '香蕉')

以下表达式:Dataframe$Fruit[which(Dataframe$Fruit == 'Apple' | Dataframe$Fruit == 'Banana')] 返回正确的元素数量,但是以下表达式给出错误的数字:Dataframe$Fruit[which(Dataframe$Fruit == keepFruit)]

我知道第二个表达式是将数组与单个文本条目进行比较,但是它为什么仍然返回一些正确的结果(返回水果匹配的元素),尽管数字不同(即不是全部)?获取 keepFruit 数组成员的所有水果的数据的更好方法是什么?

最佳答案

您需要的是 %in%,而不是 ==。这是一个例子:

df <- data.frame(Fruit = c("Apple","Banana","Apple","Mango","Banana"))
keepFruit = c('Apple', 'Banana')

ind <- with(df, Fruit %in% keepFruit)
df[ind, , drop = FALSE]

给予

> df[ind, , drop = FALSE]
Fruit
1 Apple
2 Banana
3 Apple
5 Banana

至于为什么 == 不起作用,您必须明白 == 进行逐元素比较FruitkeepFruit,即比较每个向量的第一个元素是否相等,然后比较每个向量的第二个元素,依此类推。现在 keepFruitFruit 的长度不同,因此 R 回收 keepFruit 的元素以匹配长度Fruit 的,两个向量中较长的一个。就好像 R 已经完成了

with(df, Fruit == rep(keepFruit, length = length(Fruit)))

keepFruit2 <- with(df, rep(keepFruit, length = length(Fruit)))
with(df, Fruit == keepFruit2)
rm(keepFruit2)

两者都返回(这不是你想要的,但就 R 的规则而言是正确的)

> with(df, Fruit == rep(keepFruit, length = length(Fruit)))
[1] TRUE TRUE TRUE FALSE FALSE

R 的作用远不止于此,因为它警告您较长向量 Fruit 的长度不是较短向量 keepFruit 长度的倍数> - 这几乎总是表明存在问题,因此出现警告:

> with(df, Fruit == keepFruit)
[1] TRUE TRUE TRUE FALSE FALSE
Warning messages:
1: In is.na(e1) | is.na(e2) :
longer object length is not a multiple of shorter object length
2: In `==.default`(Fruit, keepFruit) :
longer object length is not a multiple of shorter object length

要更详细地了解发生的情况,我们可以使用与 == 和结果进行比较时使用的值来扩充 df

df2 <- within(df, {
Keep <- rep(keepFruit, length = length(Fruit))
Result <- Fruit == Keep
})
df2

> df2
Fruit Result Keep
1 Apple TRUE Apple
2 Banana TRUE Banana
3 Apple TRUE Apple
4 Mango FALSE Banana
5 Banana FALSE Apple

现在您应该能够明白为什么使用 == 得到结果以及为什么它是错误的。

关于r - 获取 Dataframe 的元素数量等于 List - R 中的元素数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24558587/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com