r - 计算列中的出现次数并在 R 中创建变量

标签 r count

我是 R 的新手,我有一个名为“CT”的 data.frame ,其中包含一个名为“ID”的列,其中包含数百个不同的识别号(这些是患者)。大多数数字出现一次,但有些数字出现两次或三次(因此,在不同的行中)。
在 CT data.frame 中,我想插入一个名为“countID”的新变量,它将指示这些特定患者的出现次数(多条记录仍应出现多次)。
阅读本论坛后,我尝试了两种不同的策略:
第一个策略:

CT <- cbind(CT, countID=sequence(rle(CT.long$ID)$lengths)

但这不起作用,我只得到一个计数。
第二种策略:创建一个包含两列(一列是 ID,一列是计数)的数据框,并将此数据框与 CT 匹配:
tabs <- table(CT.long$ID)
out <- data.frame(item=names(unlist(tabs)),count=unlist(tabs)[],stringsAsFactors=FALSE)
rownames(out) = c()
head(out)

# item    count
# 1 1.312     1
# 2 1.313     2
# 3 1.316     1
# 4 1.317     1
# 5 1.321     1
# 6 1.322     1

所以这很好用,但我无法融化两个 data.frames:“out”和“CT”之间的行数不匹配(当然 out 的行数较少)。
也许有人有一个优雅的解决方案直接在data.frame CT中添加出现次数,或者正确匹配两个data.frames?

最佳答案

你快到了! rle会很好用,你只需要在 ID 上对你的表进行排序计算前 rle :

CT <- data.frame( value = runif(10) , id = sample(5,10,repl=T) )

#  sort on ID when calculating rle
Count <- rle( sort( CT$id ) )

#  match values
CT$Count <- Count[[1]][ match( CT$id , Count[[2]] ) ]
CT
#       value id Count
#1  0.94282600  1     4
#2  0.12170165  2     2
#3  0.04143461  1     4
#4  0.76334609  3     2
#5  0.87320740  4     1
#6  0.89766749  1     4
#7  0.16539820  1     4
#8  0.98521044  5     1
#9  0.70609853  3     2
#10 0.75134208  2     2

关于r - 计算列中的出现次数并在 R 中创建变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16736197/

相关文章:

r - 对 R 中列中的组执行函数

PostgreSQL 慢 COUNT() - 触发器是唯一的解决方案吗?

sql - 在 T-SQL 的桥表中选择最大组的值/最常见的值

php - 将 SQL 查询逐行输出为 JSON

mysql - 通过多链连接计数

python - 在 Python 中使用 Pandas Dataframes 对数据进行排序

r - stat_bin() 在 ggplot2 中绘制对数刻度

R解决:system is exactly singular

r - 从 ggplot2 中获取向量

r - 如何在 R 中创建缺少值的曲面图?