如何对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")]
DTmydf
长度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
xxx
是什么?@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