计算因子的出现次数

Ray*_* Sp 1 r count

我有一个像这样的df由colname Var1上的1列组成

df <- read.table(text = "Var1
|12|24|22|1|4
|12|23|22|1|445
|12|22|22|1|4
|101|116
|101|116|116|174
|101|116|125|174
|101|116|150|174
|101|116|156
|101|116|156|174
|101|116|162", header = TRUE, stringsAsFactors = FALSE)
Run Code Online (Sandbox Code Playgroud)

问题:

  1. 如何计算此| 22 |的出现次数 ?
  2. 如何计算| 22 |的出现次数 仅当在特定行中重复多次时才出现1次.例子在第3行| 22 | 重复两次,我希望R将它计为1只.

Rol*_*and 5

DF <- read.table(text = "Var1
                 |12|24|22|1|4
                 |12|23|22|1|445
                 |12|22|22|1|4
                 |101|116
                 |101|116|116|174
                 |101|116|125|174
                 |101|116|150|174
                 |101|116|156
                 |101|116|156|174
                 |101|116|162", header = TRUE, stringsAsFactors = FALSE)
x <- strsplit(DF$Var1, "|", fixed = TRUE)
sum(unlist(x) == "22")
#[1] 4
sum(sapply(x, function(s) "22" %in% s))
#[1] 3
Run Code Online (Sandbox Code Playgroud)


Dav*_*urg 5

您也可以使用|作为列分隔符读取数据集,然后所有操作都非常简单

df <- as.matrix(read.table(text = "|12|24|22|1|4
|12|23|22|1|445
|12|22|22|1|4
|101|116
|101|116|116|174
|101|116|125|174
|101|116|150|174
|101|116|156
|101|116|156|174
|101|116|162", fill = TRUE, sep = "|"))    

sum(df == 22, na.rm = TRUE)
# [1] 4
(rowSums(df == 22, na.rm = TRUE) > 0) + 0
# [1] 1 1 1 0 0 0 0 0 0 0
sum(rowSums(df == 22, na.rm = TRUE) > 0)
# [1] 3
Run Code Online (Sandbox Code Playgroud)

或者,您也可以将原始转换df为a data.table并使用该tstrsplit功能

df <- read.table(text = "Var1
                 |12|24|22|1|4
                 |12|23|22|1|445
                 |12|22|22|1|4
                 |101|116
                 |101|116|116|174
                 |101|116|125|174
                 |101|116|150|174
                 |101|116|156
                 |101|116|156|174
                 |101|116|162", header = TRUE)

library(data.table)
DT <- setDT(df)[, tstrsplit(Var1, "|", fixed = TRUE)]
DT[, sum(.SD == 22, na.rm = TRUE)]
# [1] 4
DT[, sum(rowSums(.SD == 22, na.rm = TRUE) > 0)]
# [1] 3
Run Code Online (Sandbox Code Playgroud)