R 如何计算多字符条件下的行数?
我在R中有一个数据帧,如下所示:R 如何计算多字符条件下的行数?,r,count,conditional,character,criteria,R,Count,Conditional,Character,Criteria,我在R中有一个数据帧,如下所示: ID Type --------------------------- 1 Green-Red-Red-Green 2 Pink-Blue-Red-Red 3 Green-Green-Red 4 Pink-Blue-Blue-Green 5 Red-Red-Red-Green 所以,我想计算包含单词Green和Red的行数,而不是粉色和蓝色 在这种情况下,数字将是3(3行,实际上当ID=1、3和5时)
ID Type
---------------------------
1 Green-Red-Red-Green
2 Pink-Blue-Red-Red
3 Green-Green-Red
4 Pink-Blue-Blue-Green
5 Red-Red-Red-Green
所以,我想计算包含单词Green和Red的行数,而不是粉色和蓝色
在这种情况下,数字将是3(3行,实际上当ID=1、3和5时)
我不知道如何用多个标准和角色来做到这一点。请问我该怎么做?你可以
`library(data.table)`
`dt <- as.data.table(data_frame) # transform your data frame to a data table
nrow(dt[(Type%like%"Green") & (Type%like%"Red" & !Type%like%"Pink") &
(Type%like%"Blue"),]) # & stands for AND, ! stands for NOT`
您也可以使用正则表达式:
sum(grepl("Green", dt$Type) & grepl("Red", dt$Type) & !grepl("Pink", dt$Type) & !grepl("Blue", dt$Type))
没问题。您可以将您的问题标记为已回答:)我还有另一个问题。如果我想知道粉红色在蓝色之前出现的行数?我怎样才能在单词的位置下做出一个条件?正好在蓝色之前?如果是的话,那么你可以像%“粉红-蓝色”那样做,红色或绿色可以介于两者之间。我只想在清单上先要粉红色,再要蓝色。我试着用sum函数,但我不知道它是否正确。我在每个列表的末尾都有一个END,我计算这个sum((grepl(“粉红蓝”,dt$类型)和!grepl(“粉红蓝,dt$类型”)|(grepl(“粉红绿,dt$类型”)&grepl(“蓝色”,dt$类型)和!grepl(“粉红红,dt$类型”)和!grepl(“粉红蓝,dt$类型”))
sum(grepl("Green", dt$Type) & grepl("Red", dt$Type) & !grepl("Pink", dt$Type) & !grepl("Blue", dt$Type))