如何编写R代码,在一列中循环并处理具有相同值的行(例如名称)?
例如,此表片段:如何编写R代码,在一列中循环并处理具有相同值的行(例如名称)?,r,R,例如,此表片段: ## AmAcid Codon Number PerThous ## 1 Gly GGG 25874 19.25 ## 2 Gly GGA 13306 9.90 ## 3 Ser UAC 25320 18.84 ## 4 Ser UAU 68310 50.82 ## 5 Val GUC 25874 19.25 ## 6 Val GUA 13306 9.90 ##
## AmAcid Codon Number PerThous
## 1 Gly GGG 25874 19.25
## 2 Gly GGA 13306 9.90
## 3 Ser UAC 25320 18.84
## 4 Ser UAU 68310 50.82
## 5 Val GUC 25874 19.25
## 6 Val GUA 13306 9.90
## 7 Gly GGT 25320 18.84
## 8 Gly GGC 68310 50.82
...
我想编写一个函数/循环,识别所有AmAcid==Gly
,然后在Number
和/或PerThous
列中操作它们各自的值,例如查找max、min、sum等,并对AmAcid
中的每个其他唯一字符串重复,而不仅仅是Gly
我有一个非常粗糙的伪代码,但我认为我对R的语法有点偏离了
for (i in AmAcid_tabl$AmAcid) {
deviation$i <- (max(AmAcid_tabl$Number)-min(AmAcid_tabl$Number))/mean(AmAcid_tabl$Number)
}
for(我在AmAcid\u tabl$AmAcid中){
偏差$i使用dplyr
:
library(tidyverse)
dat <- tribble(
~AmAcid, ~Codon, ~Number, ~PerThous,
"Gly", "GGG", 25874, 19.25,
"Gly", "GGA", 13306, 9.90,
"Ser", "UAC", 25320, 18.84,
"Ser", "UAU", 68310, 50.82,
"Val", "GUC", 25874, 19.25,
"Val", "GUA", 13306, 9.90,
"Gly", "GGT", 25320, 18.84,
"Gly", "GGC", 68310, 50.82
)
dat %>%
group_by(AmAcid) %>%
mutate(i = (max(Number) - min(Number)) / mean(Number)) %>%
ungroup()
库(tidyverse)
dat%
组别单位(阿莫西德)%>%
变异(i=(最大(数量)-最小(数量))/平均(数量))%>%
解组()
您可能希望使用summary()
而不是mutate()
,具体取决于您想要实现的目标。使用dplyr
:
library(tidyverse)
dat <- tribble(
~AmAcid, ~Codon, ~Number, ~PerThous,
"Gly", "GGG", 25874, 19.25,
"Gly", "GGA", 13306, 9.90,
"Ser", "UAC", 25320, 18.84,
"Ser", "UAU", 68310, 50.82,
"Val", "GUC", 25874, 19.25,
"Val", "GUA", 13306, 9.90,
"Gly", "GGT", 25320, 18.84,
"Gly", "GGC", 68310, 50.82
)
dat %>%
group_by(AmAcid) %>%
mutate(i = (max(Number) - min(Number)) / mean(Number)) %>%
ungroup()
库(tidyverse)
dat%
组别单位(阿莫西德)%>%
变异(i=(最大(数量)-最小(数量))/平均(数量))%>%
解组()
您可能希望使用summary()
而不是mutate()
,这取决于您试图实现的目标。有一些函数可以用来执行此类分组操作
在base R中,您可以执行以下操作:
aggregate(Number~AmAcid, df, function(x) (max(x) - min(x))/mean(x))
# AmAcid Number
#1 Gly 1.6566222
#2 Ser 0.9182954
#3 Val 0.6415518
使用dplyr
:
library(dplyr)
df %>%
group_by(AmAcid) %>%
summarise(new_col = (max(Number) - min(Number))/mean(Number))
或数据表
library(data.table)
setDT(df)[, .(new_col = (max(Number) - min(Number))/mean(Number)), AmAcid]
有一些函数可用于执行此类分组操作
在base R中,您可以执行以下操作:
aggregate(Number~AmAcid, df, function(x) (max(x) - min(x))/mean(x))
# AmAcid Number
#1 Gly 1.6566222
#2 Ser 0.9182954
#3 Val 0.6415518
使用dplyr
:
library(dplyr)
df %>%
group_by(AmAcid) %>%
summarise(new_col = (max(Number) - min(Number))/mean(Number))
或数据表
library(data.table)
setDT(df)[, .(new_col = (max(Number) - min(Number))/mean(Number)), AmAcid]
查看tidyverse
,尤其是dplyr
包。您可以使用groupby
和mutate
来精确执行此操作。即使没有任何for循环。查看tidyverse
包,尤其是dplyr
包。您可以使用groupby
和mutate
来精确执行此操作。Even没有任何for循环。