gpt4 book ai didi

r - 根据多列值获取数据子集

转载 作者:行者123 更新时间:2023-12-03 16:06:27 24 4
gpt4 key购买 nike

我试图根据第 2 列和第 3 列是否包含 0 来删除行。我不断得到非常奇怪的结果。我试着在没有 subset 的情况下写它最初是因为我在某处读到 subset由于内存成本,应该只用于少量数据。然而,这两种尝试都不适合我。有人可以解释我做错了什么吗?

df <- data.frame(val1=c(1,2,3), val2=c(4,0,5), val3=c(3,0,6))
subset(df,df>0,c(2,3))
data.frame(df[df[,c(2,3)]!=0])

起始数据框:
   val1   val2   val3
1 1 4 3
1 2 0 0
3 3 5 6

最终目标:
   val1   val2   val3
1 1 4 3
3 3 5 6

最佳答案

使用 subset ,我们根据第二列和第三列创建一个逻辑索引。

subset(df, subset=!(val2==0|val3==0))

subset参数适用于列而不适用于矩阵。
我们也可以使用 [而不是 subset .
df[!(df[,2]==0|df[,3]==0),]

关于 OP 帖子中的第二个答案
df[,c(2,3)]!=0 #returns a matrix
# val2 val3
#[1,] TRUE TRUE
#[2,] FALSE FALSE
#[3,] TRUE TRUE

对于行子集,我们每行只需要一个逻辑索引。

另一种选择是 rowSums (如果要删除第 2 列和第 3 列均为 0 的行)
 df[rowSums(df[2:3])!=0,]

IE。
df$val3[2] <- 2

将返回所有带有 rowSums 的行而其他方法返回第 1 行和第 3 行。

subset 等效的选项是 &
subset(df, !(val2==0 & val3==0))

关于r - 根据多列值获取数据子集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32851588/

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