如何对R中的每一行/列(单元格)值进行乘除?

如何对R中的每一行/列(单元格)值进行乘除?,r,R,我有一个名为mydf的数据帧 mydf<- structure(list(length = 18:21, A = c(40889L, 42585L, 60586L, 73374L), C = c(24283L, 66371L, 30027L, 40899L), G = c(38245L, 29170L, 37877L, 49023L), T = c(92544L, 159373L, 326940L, 654364L )), .Names = c("length", "A", "C",

我有一个名为
mydf
的数据帧

mydf<- structure(list(length = 18:21, A = c(40889L, 42585L, 60586L, 
73374L), C = c(24283L, 66371L, 30027L, 40899L), G = c(38245L, 
29170L, 37877L, 49023L), T = c(92544L, 159373L, 326940L, 654364L
)), .Names = c("length", "A", "C", "G", "T"), row.names = c(NA, 
4L), class = "data.frame")

像这样的东西可以完成任务:

x = 5
cbind(length = mydf[,1], (mydf[,-1]/x)*100)
使用
dplyr

library(dplyr)
mydf %>%
  mutate_at(vars(-1), funs(./x*100))
结果:

  length       A       C      G        T
1     18  817780  485660 764900  1850880
2     19  851700 1327420 583400  3187460
3     20 1211720  600540 757540  6538800
4     21 1467480  817980 980460 13087280
对于A列:

mydf$A <- ((mydf$A / x)*100)
mydf$A
要应用于特定列,请执行以下操作:

specific_cols <- which(names(mydf) %in% c('A', 'G', 'T'))

specific_result <- cbind(mydf[-specific_cols], ( mydf[specific_cols] / x) * 100)
dplyr溶液

mydf %>%
  mutate_at(vars(c("A","C","G","T")),funs(.*x/100))
数据表解决方案

DT <- setDT(mydf)
DT[,.SD*x/100,.SDcols = c("A","C","G","T")]
DT
mydf
长度A C G T
1     18 40889 24283 38245  92544
2     19 42585 66371 29170 159373
3     20 60586 30027 37877 326940
4     21 73374 40899 49023 654364

xx
x
是什么?@useR x是任意整数。@这不起作用。我已经试过了。应用转换并只更新所需的列
mydf[-1]=(mydf[-1]/5)*100
Yo必须通过指定mydf[,-1]排除第一列。我把答案贴了下来。@userR我把问题解决了answer@caseWestern谢谢这就是我所做的,但我认为我的数据帧值不是数字。在我转换为矩阵时工作。@MAPK您在问题中提供的数据框实际上有数字列。如果这不反映您拥有的“真实”数据框,请更新示例数据框,以免人们感到困惑。@MAPK,如果您的任何列是非数字的,您可以指定这些列,以便在操作中省去。是的,这是基本的。我只是无法将字符值转换为数字。
specific_cols <- which(names(mydf) %in% c('A', 'G', 'T'))

specific_result <- cbind(mydf[-specific_cols], ( mydf[specific_cols] / x) * 100)
  length     C       A       G        T
1     18 24283 1022225  956125  2313600
2     19 66371 1064625  729250  3984325
3     20 30027 1514650  946925  8173500
4     21 40899 1834350 1225575 16359100
mydf %>%
  mutate_at(vars(c("A","C","G","T")),funs(.*x/100))
DT <- setDT(mydf)
DT[,.SD*x/100,.SDcols = c("A","C","G","T")]
mydf[c("A","C","G","T")] <- mydf[c("A","C","G","T")]*x/100
mydf
length     A     C     G      T
1     18 40889 24283 38245  92544
2     19 42585 66371 29170 159373
3     20 60586 30027 37877 326940
4     21 73374 40899 49023 654364
x<-2
mydf[,-1]<-(mydf[-1]/x)*100
mydf
length       A       C       G        T
1     18 2044450 1214150 1912250  4627200
2     19 2129250 3318550 1458500  7968650
3     20 3029300 1501350 1893850 16347000
4     21 3668700 2044950 2451150 32718200