我想计算我的学生说出 5 个特定单词的次数,并对学生的回答进行子集/过滤,其中单词顺序正确。 正确的顺序=绿、黄、橙、红、黑。 所有数据均为小写且无标点符号:
# Student responses
Id Data$Colors
1 green yellow orange red black
2 yellow green orange red black
3 red violet pink black
4 purple green orange red black
5 blue pink yellow scarlet
我的目标输出是:
# Student responses
Id Data$Colors Data$Count Data$CorrOrder
1 green yellow orange red black 5 TRUE
2 yellow green orange red blacks 4 FALSE
3 red violet pink black 2 TRUE
4 purple green orange red black 4 TRUE
5 blue pink yellow brown 1 NA
6 green yellow orange red very red black 4* TRUE
重复-1分。 我已经能够通过这样做获得计数列
Data <- c("\\bgreen\\b", "\\byellow\\b", "\\borange\\b", "\\bred\\b", "\\bblack\\b")
Data$Count<- str_count(Data$Colors, paste(Data, collapse = '|'))
但是,这不会减去重复的正确颜色(例如 Id 6)。
有人知道我如何生成Data$CorrOrder
吗?
最佳答案
首先,如果您将值视为有序
因子,则可以使用is.unsorted
检查它们是否已排序,无需排序:
colorder <- c("green", "yellow", "orange", "red", "black")
spl <- lapply(strsplit(dat$Colors, "\\s+"), ordered, levels=colorder)
cnt <- sapply(spl, function(x) length(unique(na.omit(x))) - sum(tabulate(x) > 1) )
cnt
#[1] 5 4 2 4 1 4
out <- !sapply(spl, is.unsorted, na.rm=TRUE)
out[cnt == 1] <- NA
out
#[1] TRUE FALSE TRUE TRUE NA TRUE
关于r - 检测字符串是否按特定顺序出现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56625826/