一列中相同值的R子集行取决于另一列中的多个值
Posted
技术标签:
【中文标题】一列中相同值的R子集行取决于另一列中的多个值【英文标题】:R subset rows of same value in one column dependent on multiple values in another column 【发布时间】:2022-01-10 07:15:13 【问题描述】:我是 R 新手,可能有一个简单的解决方案,但我很难找到一个。 我希望对数据框进行子集化,以排除在另一行中没有提供这两个值的所有行。 所以,假设这是我的数据框: df1
v1 | v2 | v3 |
---|---|---|
A | 1 | x |
A | 2 | y |
A | 3 | x |
B | 4 | x |
C | 5 | y |
C | 6 | y |
D | 7 | y |
D | 8 | x |
我希望消除对应字母 (v1) 中没有 x 和 y 值 (v3) 的所有行,同时保持所有其他列不变 (v2) 所以我的最终结果是:
v1 | v2 | v3 |
---|---|---|
A | 1 | x |
A | 2 | y |
A | 3 | x |
D | 7 | y |
D | 8 | x |
只有值 A 和 D 会被保留,因为它们同时具有对应的 x 和对应的 y 值。 B 和 C 将被消除,因为它们只有 x 或 y 中的一个,而不是两者。
我尝试过使用 group_by 和 filter。结果显示为空数据框:
library(dplyr)
df2 <- df1 %>%
group_by(v1) %>%
filter(all(c('x', 'y') %in% v3))
还有:
library(dplyr)
df2 <- df1 %>%
group_by(v1) %>%
filter(any(v3 == "x"),
any(v3 == "y"))
【问题讨论】:
我只是对其进行了编辑以使表格可见,然后您未对其进行编辑。哈哈 【参考方案1】:df1 %>%
group_by(v1) %>%
filter(all(unique(df1$v3) %in% v3))
# A tibble: 5 x 3
# Groups: v1 [2]
v1 v2 v3
<chr> <int> <chr>
1 A 1 x
2 A 2 y
3 A 3 x
4 D 7 y
5 D 8 x
【讨论】:
【参考方案2】:试试这个aggregate
解决方案
df1[df1$v1 %in% names( which( table(
aggregate( . ~ v3 + v1, df1, c )[,"v1"] ) > 1 )),]
v1 v2 v3
1 A 1 x
2 A 2 y
3 A 3 x
7 D 7 y
8 D 8 x
数据
df1 <- structure(list(v1 = c("A", "A", "A", "B", "C", "C", "D", "D"),
v2 = 1:8, v3 = c("x", "y", "x", "x", "y", "y", "y", "x")), class = "data.frame", row.names = c(NA,
-8L))
【讨论】:
以上是关于一列中相同值的R子集行取决于另一列中的多个值的主要内容,如果未能解决你的问题,请参考以下文章
如何在 python 的另一列中的字符串值中从数据框中的一列中搜索字符串?
清除一张纸上一列中每一行的内容,取决于另一张纸上同一行中一列中的更改