首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当所有值都在R中数据帧的同一列中时,计算百分比

当所有值都在R中数据帧的同一列中时,计算百分比
EN

Stack Overflow用户
提问于 2020-10-14 02:53:29
回答 3查看 95关注 0票数 2

我有以下数据框

代码语言:javascript
复制
x <- data.frame("treatment"= c(1, 1, 1, 1, 2, 2, 2, 2), 
              "Time" = c(0, 30, 60, 180, 0, 30, 60, 180), 
              "cells_alive" = c(500, 470, 100, 20, 476, 310, 99, 2))

在这个实验中,我有两个处理,我测量了随着时间的推移活细胞的数量。时间0的细胞数量是该处理的初始细胞数量。我需要计算新列中每个时间的细胞存活百分比。因此,在处理1的情况下,它将是500/500,470/500,100/500等等。你知道怎么计算这个吗?

谢谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-10-14 02:59:22

代码语言:javascript
复制
require(tidyverse)

x %>% 
left_join(x %>% select(treatment, cells_alive) %>% 
group_by(treatment) %>% 
top_n(1) %>% 
ungroup(), by = "treatment") %>% 
mutate(cells_alive_per = cells_alive.x/cells_alive.y)
票数 2
EN

Stack Overflow用户

发布于 2020-10-14 03:08:07

使用data.table

代码语言:javascript
复制
library(data.table)
setDT(x) #converting x to data.table 
x[,.(Time, value = cells_alive / cells_alive[which(Time == 0)]),treatment]

#output
   treatment Time       value
1:         1    0 1.000000000
2:         1   30 0.940000000
3:         1   60 0.200000000
4:         1  180 0.040000000
5:         2    0 1.000000000
6:         2   30 0.651260504
7:         2   60 0.207983193
8:         2  180 0.004201681
票数 1
EN

Stack Overflow用户

发布于 2020-10-14 17:40:54

在发布了dplyrdata.table版本之后,为了完整起见,这里有一个不需要安装包的版本:

代码语言:javascript
复制
stack(tapply(x$cells_alive, x$treatment, function(ca) ca / ca[1] ))

这给了我们

代码语言:javascript
复制
> stack(tapply(x$cells_alive, x$treatment, function(ca) ca / ca[1] ))
       values ind
1 1.000000000   1
2 0.940000000   1
3 0.200000000   1
4 0.040000000   1
5 1.000000000   2
6 0.651260504   2
7 0.207983193   2
8 0.004201681   2
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64341464

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档