R 通过计算每个ID的百分比来制作表格
以下是我的数据:R 通过计算每个ID的百分比来制作表格,r,R,以下是我的数据: ID nb value ID1 3 1 ID1 3 0 ID1 3 1.5 ID2 2 12 ID2 2 648 ID3 4 7 ID3 4 0 ID3 4 0 ID3 4 7 ID4 2 146 ID4 2 3
ID nb value
ID1 3 1
ID1 3 0
ID1 3 1.5
ID2 2 12
ID2 2 648
ID3 4 7
ID3 4 0
ID3 4 0
ID3 4 7
ID4 2 146
ID4 2 3
nb显示每个ID的值的数目
我想通过计算value==0,0的百分比得到一个表,您可以使用cut创建组,然后尝试在列的子集上使用table,即'ID'和'grp'列
tbl <- table(transform(df1, grp=cut(value, breaks=c(-Inf, 0, 6.0001, Inf),
labels=c('value=0', '0<value<6', 'value>=6')))[c(1,4)])
res <- prop.table(tbl,1)
res
# grp
#ID value=0 0<value<6 value>=6
# ID1 0.3333333 0.6666667 0.0000000
# ID2 0.0000000 0.0000000 1.0000000
# ID3 0.5000000 0.0000000 0.5000000
# ID4 0.0000000 0.5000000 0.5000000
数据
因此,它不是一个代码编写服务。您尝试过哪些不起作用的方法?@hrbrmstr我尝试过setDTdf[,p1:=lengthv==0/.N,by=.ID],但它不起作用work@MamounBenghezal我觉得休息时需要一些改变。我只是在尝试OP的例子。为什么我们需要[c1,4]?@velvetrock我正在对数据集进行子集设置,以便只包括第一个和第四个column@MamounBenghezal对不起,标签上有什么问题?这是OP要求的。但是如果我有超过4个ID,比如1000,我应该将其更改为[C11000]
tbl <- table(transform(df1, grp=cut(value, breaks=c(-Inf, 0, 6.0001, Inf),
labels=c('value=0', '0<value<6', 'value>=6')))[c(1,4)])
res <- prop.table(tbl,1)
res
# grp
#ID value=0 0<value<6 value>=6
# ID1 0.3333333 0.6666667 0.0000000
# ID2 0.0000000 0.0000000 1.0000000
# ID3 0.5000000 0.0000000 0.5000000
# ID4 0.0000000 0.5000000 0.5000000
library(MASS)
fractions(res)
# grp
#ID value=0 0<value<6 value>=6
# ID1 1/3 2/3 0
# ID2 0 0 1
# ID3 1/2 0 1/2
# ID4 0 1/2 1/2
tbl[] <- ifelse(tbl==0, 0, paste0(tbl, '/', rowSums(tbl)))
tbl
# grp
#ID value=0 0<value<6 value>=6
# ID1 1/3 2/3 0
# ID2 0 0 2/2
# ID3 2/4 0 2/4
# ID4 0 1/2 1/2
df1 <- structure(list(ID = c("ID1", "ID1", "ID1", "ID2", "ID2", "ID3",
"ID3", "ID3", "ID3", "ID4", "ID4"), nb = c(3L, 3L, 3L, 2L, 2L,
4L, 4L, 4L, 4L, 2L, 2L), value = c(1, 0, 1.5, 12, 648, 7, 0,
0, 7, 146, 3)), .Names = c("ID", "nb", "value"), class = "data.frame",
row.names = c(NA, -11L))