想了解一下dplyr代码,但无法弄清楚这一点.见过这里所描述的许多变量(一个类似的问题,总结因素的计数与dplyr并把值出现次数的计数横行到新的变数,如何做到在R里面有dplyr? ),但我的任务就是略小.
给定一个数据框,如何计算变量的频率并将其放在一个新变量中.
set.seed(9)
df <- data.frame(
group=c(rep(1,5), rep(2,5)),
var1=round(runif(10,1,3),0))
Run Code Online (Sandbox Code Playgroud)
然后我们有:
>df
group var1
1 1 1
2 1 1
3 1 1
4 1 1
5 1 2
6 2 1
7 2 2
8 2 2
9 2 2
10 2 3
Run Code Online (Sandbox Code Playgroud)
想要第三列指示每组(group)var1发生多少次,在这个例子中,这将是:count =(4,4,4,4,1,1,3,3,3,1).我试过 - 没有成功 - 比如:
df %>% group_by(group) %>% rowwise() %>% do(count = nrow(.$var1))
Run Code Online (Sandbox Code Playgroud)
解释非常感谢!
我是R的新手,我有一个名为"CT"的data.frame,其中包含一个名为"ID"的列,其中包含数百个不同的标识号(这些是患者).大多数数字出现一次,但有些出现两次或三次(因此,在不同的行中).在CT data.frame中,我想插入一个名为"countID"的新变量,该变量将指示这些特定患者的出现次数(多个记录应该仍然出现几次).在阅读本论坛后,我尝试了两种不同的策略:第一种策略:
CT <- cbind(CT, countID=sequence(rle(CT.long$ID)$lengths)
Run Code Online (Sandbox Code Playgroud)
但这不起作用,我得到一个计数.第二个策略:创建一个包含两列的数据框(一个是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
Run Code Online (Sandbox Code Playgroud)
所以这工作正常,但我不能融化两个data.frames:"out"和"CT"之间的行数不匹配(当然,行数较少).也许某人有一个优雅的解决方案,可以直接在data.frame CT中添加出现次数,或者正确匹配两个data.frames?丹尼斯,提前谢谢