我试图找出一种方法,根据R中的每个因素找到特定的值--换句话说,我如何使所有行都满足每个因素的特定条件,即使该特定行失败了一个条件,但它的相同因素传递了另一行上的条件?
所以我有这样的东西:
gender values fruit
1 M 20 apple
2 M 22 pear
3 F 24 mango
4 F 19 mango
5 F 9 mango
6 F 17 apple
7 M 18 banana
8 M 22 banana
9 M 12 banana
10 M 14 mango
11 F 7 apple
12 F 8 apple我想要每个水果,至少有一个F性别(即使那个水果有一些M's)。也有可能有多个性别,如中性(未显示)。所以我的理想输出是:
gender values fruit
1 M 20 apple
3 F 24 mango
4 F 19 mango
5 F 9 mango
6 F 17 apple
10 M 14 mango
11 F 7 apple
12 F 8 apple请注意,香蕉和梨不见了,因为那些水果只有M's而没有F's。而且,第1行和第10行仍然在那里,尽管它们是M的,因为还有其他苹果和芒果有F的,它仍然适用。如果可能的话请告诉我。谢谢!
下面是我复制这些数据的代码:
gender <- c("M","M","F","F","F","F","M","M","M","M","F","F")
values <- c(20,22,24,19,9,17,18,22,12,14,7,8)
fruit <- c("apple","pear","mango","mango","mango","apple","banana","banana","banana","mango","apple","apple")
df <- data.frame(gender, values, fruit)到目前为止,我尝试过的是:
df[duplicated(df[,c("fruit","gender")]),]
ave(df$gender, df$fruit, FUN=function(x) ifelse(x=='F','yes','no'))此外,第三方库是受欢迎的,但我更喜欢停留在R(软件包统计和plyr是好的,因为我有这些在我的系统)。
发布于 2015-06-30 15:16:46
df[df$fruit %in% unique(df[df$gender =='F', ]$fruit),]
# gender values fruit
#1 M 20 apple
#3 F 24 mango
#4 F 19 mango
#5 F 9 mango
#6 F 17 apple
#10 M 14 mango
#11 F 7 apple
#12 F 8 apple发布于 2015-06-30 15:19:32
可能的data.table方法
library(data.table)
setDT(df)[, if(any(gender == "F")) .SD, by = fruit]
# fruit gender values
# 1: apple M 20
# 2: apple F 17
# 3: apple F 7
# 4: apple F 8
# 5: mango F 24
# 6: mango F 19
# 7: mango F 9
# 8: mango M 14我喜欢另一种方法,下面是一个使用二进制联接的data.table等价物
setkey(setDT(df), fruit)[.(unique(df[gender == "F", fruit], by = "fruit"))]
# gender values fruit
# 1: F 17 apple
# 2: F 7 apple
# 3: F 8 apple
# 4: M 20 apple
# 5: F 24 mango
# 6: F 19 mango
# 7: F 9 mango
# 8: M 14 mango发布于 2015-06-30 19:06:55
基本r、data.table和这里我提供了dplyr解决方案,尽管有些输出是不同的(至少按结果的顺序排列)。
library(dplyr)
df %>% group_by(fruit) %>% filter(any(gender == "F"))
Source: local data frame [8 x 3]
Groups: fruit
gender values fruit
1 M 20 apple
2 F 24 mango
3 F 19 mango
4 F 9 mango
5 F 17 apple
6 M 14 mango
7 F 7 apple
8 F 8 applehttps://stackoverflow.com/questions/31141788
复制相似问题