我有一个虚拟数据框,例如-
account account_type
1 A
1 B
1 C
2 A
2 A
3 C
3 D
我只想过滤那些具有多个account_type的帐户,它将返回所有这些帐户的向量。因此,它将遍历完整的数据框并给出基本上分配给不同帐户类型的所有帐户的向量(我的意思是account_type值大于1)。
所以最终输出是-1,3
答案 0 :(得分:0)
使用data.table
:
library(data.table)
setDT(df)
df[, .(nacc = uniqueN(account_type)), by = account][nacc > 1, toString(account)]
## [1] "1, 3"
在dplyr
中做类似的事情:
library(dplyr)
df %>%
group_by(account) %>%
summarise(nacc = n_distinct(account_type)) %>%
filter(nacc > 1) %>%
summarise(toString(account)) %>%
pull()
## [1] "1, 3"
位置:
df <- data.frame(
account = c(1L, 1L, 1L, 2L, 3L, 3L),
account_type = c("A", "B", "C", "A", "C", "D")
)
答案 1 :(得分:0)
您可以执行以下操作。删除重复的条目。子集table
的结果并提取names
。
d <- d[!duplicated(d),]
names(table(d$account)[table(d$account)>1])
#[1] "1" "3"
您的数据
d <- read.table(text="
account account_type
1 A
1 B
1 C
2 A
2 A
3 C
3 D", header=T, stringsAsFactors=F)
答案 2 :(得分:0)
您也可以尝试使用 =SPLIT(
ARRAY_CONSTRAIN(
QUERY(
IMPORTRANGE("13evadbMLzvQVSGbYssn_0deFdcmb5l3sqpeFgcNTjOY"; "'Sheet1'!AG1:AG1000");
"select Col1 where Col1 ='"&
FILTER(
IMPORTRANGE("13evadbMLzvQVSGbYssn_0deFdcmb5l3sqpeFgcNTjOY"; "'Sheet1'!AG1:AG1000");
ISNUMBER(
SEARCH("♤";
IMPORTRANGE("13evadbMLzvQVSGbYssn_0deFdcmb5l3sqpeFgcNTjOY"; "'Sheet1'!AG1:AG1000"))
))
&"'");
1; 1);
"♤"; 1; 0)
库:
=SPLIT(
ARRAY_CONSTRAIN(
QUERY(
IMPORTRANGE("13evadbMLzvQVSGbYssn_0deFdcmb5l3sqpeFgcNTjOY"; "'Sheet1'!AG1:AG1000");
"select Col1 where Col1 ='"&
FILTER(
IMPORTRANGE("13evadbMLzvQVSGbYssn_0deFdcmb5l3sqpeFgcNTjOY"; "'Sheet1'!AG1:AG1000");
ISNUMBER(
SEARCH("avg LMT";
IMPORTRANGE("13evadbMLzvQVSGbYssn_0deFdcmb5l3sqpeFgcNTjOY"; "'Sheet1'!AG1:AG1000"))
))
&"'");
1; 1);
"♤"; 1; 0)
输出:
Plyr
另一种方法
library(plyr)
test=count(df, c('account')) # Count the frequency based on account type
test[test$freq>1,1] # Select the account with freq>1
输出:
[1] 1 3
答案 3 :(得分:0)
基本的R解决方案。我们可以使用tapply
来应用table
函数来计算每个account
的类型,提取表名,并保留一个以上的名字。
r_list <- lapply(tapply(dat$account_type, dat$account, FUN = table), names)
r_vec <- names(r_list[sapply(r_list, length) > 1])
r_vec
# [1] "1" "3"
数据
dat <- read.table(text = "account account_type
1 A
1 B
1 C
2 A
2 A
3 C
3 D",
header = TRUE, stringsAsFactors = FALSE)
答案 4 :(得分:0)
您可以使用以下内容过滤R中的记录:
with(unique(dat), unique(account[duplicated(account)]))
# [1] 1 3