我有一个数据框,如下所示:
Name Place a b c sum
xyz mno 1 2 3 6
pqr jkl 4 6 1 11
我想在R脚本中使用一个命令来帮助我将“a”,“b”和“c”列中的数值除以相应“sum”列中的值
因此,我的输出将是:
Name Place a b c sum
xyz mno 1/6 2/6 3/6 6
pqr jkl 4/11 6/11 1/11 11
答案 0 :(得分:2)
我们可以尝试
df1[3:5] <- df1[3:5]/df1[6][row(df1[3:5])]
或者只是
df1[3:5] <- df1[3:5]/df1[,6]
df1
# Name Place a b c sum
#1 xyz mno 0.1666667 0.3333333 0.50000000 6
#2 pqr jkl 0.3636364 0.5454545 0.09090909 11
或使用dplyr
library(dplyr)
df1 %>%
mutate_each(funs(./df1$sum), a:c)
或者我们可以使用data.table
library(data.table)
setDT(df1)
nm1 <- letters[1:3]
for(j in nm1){
set(df1, i=NULL, j=j, value= df1[[j]]/df1$sum)
}
答案 1 :(得分:0)
如果您想将其保留为分数,则可以尝试fractions
包中的MASS
函数
library(MASS)
fractions(unlist(df[, 3:5])/df[,6])
# a1 a2 b1 b2 c1 c2
# 1/6 4/11 1/3 6/11 1/2 1/11
但是,这会将2/6
评估为1/3
,依此类推。