我必须根据特定条件过滤数据帧。如果解决方案考虑使用dplyr,效果更好。
我有这样的数据帧结构
sentId. B. label. partner. code
1. 2. 3. 4. 123
1. 2. 2. 4. 124
4. 2. 3. 8. 125
7. 3. 2. 7. 126
如果列标签包含特定值(例如,3.),不仅要收集该行,还要收集与前一行具有相同sentID和partner值的所有行。
预期结果如下:
sentId. B. label. partner. code
1. 2. 3. 4. 123
1. 2. 2. 4. 124
4. 2. 3. 8. 125
使用SQL可以很容易地解决这个问题,因此一个选项是使用sqldf
库:
library(sqldf)
# your data frame df
sql <- "SELECT t1.\"sentId.\", t1.\"B.\", t1.\"label.\", t1.\"partner.\", t1.code
FROM yourTable t1
WHERE t1.\"label.\" = '3.' OR
EXISTS (SELECT 1 FROM yourTable t2
WHERE t1.\"sentId.\" = t2.\"sentId.\" AND
t1.\"partner.\" = t2.\"partner.\" AND
t2.\"label.\" = '3.')"
result <- sqldf(sql)
注意:上面的演示实际上使用了MariaDB,因为SQLite没有使用演示工具。但它仍然表明查询逻辑是正确的。
我们可以首先找到我们感兴趣的标签
值所在的行索引,然后使用这些索引对整个数据帧中的sentId
和partner
值进行子集。
label_value <- 3
inds <- df$label == label_value
df[with(df, sentId %in% sentId[inds] & partner %in% partner[inds]), ]
# sentId B label partner code
#1 1 2 3 4 123
#2 1 2 2 4 124
#3 4 2 3 8 125
dplyr
中的相同逻辑是
library(dplyr)
df %>%
filter(sentId %in% sentId[label == label_value] &
partner %in% partner[label == label_value])
我们可以使用%中的%对按“sentId”分组后的行进行
筛选和“合伙人”
library(dplyr)
df1 %>%
group_by(sentId., partner.) %>%
filter(3 %in% label.)
# A tibble: 3 x 5
# Groups: sentId. [2]
# sentId. B. label. partner. code
# <dbl> <dbl> <dbl> <dbl> <int>
#1 1 2 3 4 123
#2 1 2 2 4 124
#3 4 2 3 8 125
或以紧凑的方式与
data.table
library(data.table)
setDT(df1)[, .SD[3 %in% label.], .(sentId., partner.)]
或使用
base R
df1[with(df1, ave(label.==3, sentId., partner., FUN = any)),]
df1 <- structure(list(sentId. = c(1, 1, 4, 7), B. = c(2, 2, 2, 3), label. = c(3,
2, 3, 2), partner. = c(4, 4, 8, 7), code = 123:126),
class = "data.frame", row.names = c(NA,
-4L))
在scala火花数据帧中是否有的替代方案。我想从火花数据帧的列中选择特定的行。例如,在R等效代码中的第100行
我有一个包含以下列名的dataframe(对于引用,我只提到了一行)。我希望获得中的最大size_cd。在本例中,具有最大值,即24。我想将列名称中的数字作为返回值返回。 输入数据帧: 必需输出:即后面的部分(因为此列具有最大值) 我将感谢您对此的反馈。
问题内容: 我有一个包含6列的R数据框,并且我想创建一个仅包含三列的新数据框。 假设我的数据帧df,我想提列A,B和E,这是唯一的命令,我可以计算出: 有没有更紧凑的方法可以做到这一点? 问题答案: 如果您的data.frame被调用,则使用dplyr包df1: 也可以在不使用%>%管道的情况下将其写为:
对于熊猫数据帧的特定列,该列实际上是转换成BCD的16位数据。我只想提取特定行的14-8位并转换为BCD。下面的公式适用于如下的小数据帧。 但当我申请时 对于688126行的较大数据帧,我得到一个错误,说 基数为2的int()的文本无效:“” 错误如下所示 ValueError Traceback(最近调用最后一次)在1 df.LO_TIME_0_J2_0---- C:\ProgramData\A
我有一个数据框,比如说一些投资数据。我需要根据某些条件(比如说,U类型)从这个数据帧中提取数据。有许多可用的基金类型,我只需要提取与特定基金类型匹配的数据。 funding_type有风险、种子、天使、股权等价值。我只需要数据匹配资金类型比如种子和天使 我试着跟着 这里MF1是我的数据帧。这将提供与种子基金类型相关的所有数据 我需要的条件有点像 MF1[MF1['funding_round_typ
我有一个如下所示的数据帧: 我需要提取lat=30.75和lon 76.25的行,对于我使用的行: 但这表明了这个错误: