在 R 的另一列中保留不唯一但具有不同标签的行
Keep rows which are not unique but have different labels in another column in R
我有一个名为 'dataframe'
的数据框
它有一列 'exposures' 例如ABC、DEF、GHI 和一列 'labels' 红色和黄色。它们可以位于标记为 'red' 的一行或标记为 'red' 的多行,也可以位于标记为 'yellow' 和 'red'
的多行
Exposure Label
ABC yellow
DEF yellow
GHI red
GHI red
GHI red
JKL yellow
DEF red
ABC yellow
ABC red
如何提取多次但颜色不同的?所以在这里我想保留 ABC,因为它既有黄色又有红色,但失去 GHI,因为它们只有红色。
到目前为止,我只能保留那些非唯一的
both <- dataframe %>% group_by(Exposure) %>% filter(n()>1)
但无法弄清楚如何指定保留那些仅具有不同标签而不是相同标签的标签?
谢谢!
您可以将两列合并成一个新列,然后使用 unique 进行子集化。
df$x <- paste(df$Exposure,df$Label)
df <- df[!duplicated(df$x), ]
一切顺利,
库尔特
library(data.table)
# Sample data
DT <- fread("Exposure Label
ABC yellow
DEF yellow
GHI red
GHI red
GHI red
JKL yellow
DEF red
ABC yellow
ABC red")
# Filter based more than 1 unique Label by Exposure-group
DT[, if(uniqueN(Label) > 1) .SD, by = Exposure]
# Exposure Label
# 1: ABC yellow
# 2: ABC yellow
# 3: ABC red
# 4: DEF yellow
# 5: DEF red
基本 R 选项
subset(
dataframe,
ave(Label, Exposure, FUN = function(x) length(unique(x))) > 1
)
给予
Exposure Label
1 ABC yellow
2 DEF yellow
7 DEF red
8 ABC yellow
9 ABC red
n()
会给出组中的行数,n_distinct(Label)
会给出唯一值的计数。
library(dplyr)
dataframe %>% group_by(Exposure) %>% filter(n_distinct(Label)>1) %>% ungroup
# Exposure Label
# <chr> <chr>
#1 ABC yellow
#2 DEF yellow
#3 DEF red
#4 ABC yellow
#5 ABC red
我有一个名为 'dataframe'
的数据框它有一列 'exposures' 例如ABC、DEF、GHI 和一列 'labels' 红色和黄色。它们可以位于标记为 'red' 的一行或标记为 'red' 的多行,也可以位于标记为 'yellow' 和 'red'
的多行Exposure Label
ABC yellow
DEF yellow
GHI red
GHI red
GHI red
JKL yellow
DEF red
ABC yellow
ABC red
如何提取多次但颜色不同的?所以在这里我想保留 ABC,因为它既有黄色又有红色,但失去 GHI,因为它们只有红色。
到目前为止,我只能保留那些非唯一的
both <- dataframe %>% group_by(Exposure) %>% filter(n()>1)
但无法弄清楚如何指定保留那些仅具有不同标签而不是相同标签的标签?
谢谢!
您可以将两列合并成一个新列,然后使用 unique 进行子集化。
df$x <- paste(df$Exposure,df$Label)
df <- df[!duplicated(df$x), ]
一切顺利, 库尔特
library(data.table)
# Sample data
DT <- fread("Exposure Label
ABC yellow
DEF yellow
GHI red
GHI red
GHI red
JKL yellow
DEF red
ABC yellow
ABC red")
# Filter based more than 1 unique Label by Exposure-group
DT[, if(uniqueN(Label) > 1) .SD, by = Exposure]
# Exposure Label
# 1: ABC yellow
# 2: ABC yellow
# 3: ABC red
# 4: DEF yellow
# 5: DEF red
基本 R 选项
subset(
dataframe,
ave(Label, Exposure, FUN = function(x) length(unique(x))) > 1
)
给予
Exposure Label
1 ABC yellow
2 DEF yellow
7 DEF red
8 ABC yellow
9 ABC red
n()
会给出组中的行数,n_distinct(Label)
会给出唯一值的计数。
library(dplyr)
dataframe %>% group_by(Exposure) %>% filter(n_distinct(Label)>1) %>% ungroup
# Exposure Label
# <chr> <chr>
#1 ABC yellow
#2 DEF yellow
#3 DEF red
#4 ABC yellow
#5 ABC red