我是 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/