在R中根据多列条件对数据进行排序

3

我拥有以下内容:

df1<-read.table(text=" Id Item Group Hard
Id Item Group Hard
12 B12 A Y
14 B6 B N
17 B5 D Y
33 B10 D Y
44 B12 D N
55 B6 D Y
75 B5 D Y
44 B10 A Y
33 B12 D N
21 B6 A Y
16 B12 A N
",header=TRUE)

我想使用ID匹配我的数据。如果Hard列中为"Y"和"N",我希望获得B12;如果只有"Y",则希望获得B6。
我希望获取以下表格:

id Item Group Hard
12 B12 A Y
44 B12 D N
55 B6 D Y
33 B12 D N
21 B6 A Y
16 B12 A N

我知道我需要告诉你我的努力,但我已经搜索了很久,却找不到任何解决方案。谢谢你的帮助。

1个回答

2

由于“Hard”列中只有“Y”和“N”,因此第一个条件只能应用于“Item”列,而第二个条件可以使用“Hard”中的“Y”。

subset(df1, Item == 'B12'| (Item == 'B6' & Hard == 'Y'))
#    Id Item Group Hard
#2  12  B12     A    Y
#6  44  B12     D    N
#7  55   B6     D    Y
#10 33  B12     D    N
#11 21   B6     A    Y
#12 16  B12     A    N

使用dplyr,将subset更改为filter

library(dplyr)
filter(df1, Item == 'B12'| (Item == 'B6' & Hard == 'Y'))

1
谢谢,akrun。 - user10072460
@User20100 只需使用 subset(df1, Item != "B12"),如果有许多其他的 'Item',而你只想要 'B6',那么就用 subset(df1, Item == "B6" & Hard == "Y") - akrun
@User20100 你需要 subset(df1, !(Item == "B12" & Hard != "Y")) 吗? - akrun
@User20100 如果您能更清楚地表达期望,那么理解起来会更容易。 - akrun

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接