r - 仅基于另一列中的一个条件归还特定类型的所有行
问题描述
我得到了以下数据集。
Name Date AC AD Value
A 2008-04 -0.5
A 2008-06 3
A 2009-05 -0.8
A 2010-04 -0.6
B 2005-04 2
B 2006-05 2
B 2010-08 -1
C 2012-05 2
D 2016-05 5
D 2017-05 6
我对列值中的负数感兴趣。如果我的列值中至少有一个数字是负数,我正在寻找一个代码,它可以让我返回名称 A 中的所有行。
所以在上面的例子中,我对 A 的所有 4 行和 B 的 3 行感兴趣,但我不想从 C 和 D 中获取行,因为对于他们的所有观察结果都没有负值。
Name Date AC AD Value
A 2008-04 -0.5
A 2008-06 3
A 2009-05 4
A 2010-04 -0.6
B 2005-04 2
B 2006-05 2
B 2010-08 -1
B 2012-05 2
C 2016-05 5
C 2017-05 6
可以用代码表示吗 谢谢:)
解决方案
我们可以使用data.table
. 将 'data.frame' 转换为 'data.table' ( setDT(df1)
,按 'Name' 分组if
any
'Value' 小于 0,则得到 data.table ( .SD
)的子集
library(data.table)
setDT(df1)[, if(any(Value <0)) .SD, Name]
# Name Date Value
#1: A 2008-04 -0.5
#2: A 2008-06 3.0
#3: A 2009-05 -0.8
#4: A 2010-04 -0.6
#5: B 2005-04 2.0
#6: B 2006-05 2.0
#7: B 2010-08 -1.0
或者用subset
frommbase R
subset(df1, Name %in% names(which(!!table(df1[,1], df1[,3] < 0)[,2])))
数据
df1 <- structure(list(Name = c("A", "A", "A", "A", "B", "B", "B", "C",
"D", "D"), Date = c("2008-04", "2008-06", "2009-05", "2010-04",
"2005-04", "2006-05", "2010-08", "2012-05", "2016-05", "2017-05"
), Value = c(-0.5, 3, -0.8, -0.6, 2, 2, -1, 2, 5, 6)),
class = data.frame", row.names = c(NA, -10L))
推荐阅读
- javascript - React:通过单击父组件触发子组件中的事件
- python - Python中的两个字典比较
- r - 将 2015 年和 2016 年的销售额与 R 中以下数据框中的 Tier 和 Region 进行比较
- android - 从第一个活动到第二个活动的意图图像,并将文本添加到 Firebase 数据库中
- phpword - 包含文件夹中缺少文件 PhpOffice\PhpWord\TemplateProcessor.php
- jenkins - 从 Jenkins 作业运行交互式 docker 容器
- aeron - 在生产中的 Aeron 集群中设置文件同步级别 0 是否安全?
- android - 获取视图的位置并将其设置为 x,y 以用于另一个视图,但它们不匹配
- python - 我可以使用带有 dtype=object 的 numpy 数组在类实例之间共享任意类型的列表吗?
- python - pandas groupby 单列但添加多列的内容