这是我的资料
No col1 col2 col3 Total
1 5 8 9 70
2 3 4 11 80
. . . . .
. . . . .
10 6 1 15 90这就是我想要达到的
No col1 col2 col3 Total p_col1 p_col2 p_col3
1 5 8 9 70 (5/70) (8/70) (9/70)
2 3 4 11 80 (3/80) (4/80) (11/80)
. . . . . . . .
. . . . . . . .
10 6 1 15 90 . . .这就是我试过的
DF1=read.csv("R/path/abc_5.csv")
DF1 <- DF1[,c(1:6,12)]
nop <- basename("R/path/abc_5.csv")
m <- gregexpr("[0-9]", nop)
nop <- as.numeric(unlist(regmatches(nop, m)))
nop <- nop[length(nop)]
DF2 <- DF1[,2:(nop+1)]
cn <- colnames(DF1)[2:(nop+1)]
cn_p <- paste("p_",cn)
DF1$cn_p[1] <- mapply("/", DF1$cn[1], DF1$Total)*100我想对循环中的所有列自动化这一点,所以我只是先测试了一个列,但是我没有得到适当的输出--任何帮助都是appreciated.Thanks!
发布于 2017-01-10 14:08:08
我们可以用
DF1[paste0("p_", names(DF1)[2:4])] <- DF1[2:4]/DF1$Total发布于 2017-01-10 13:29:11
这应该对你有用。您可以使用sapply来输入行,行除以总数。然后可以使用names为新创建的列分配名称。
xx=cbind(df,sapply(df[2:(ncol(df)-1)], function(x) x/df$Total))
names(xx)[(ncol(df)+1):(length(xx))]=paste('p_',names(xx)[(ncol(df)+1):(length(xx))], sep = '')https://stackoverflow.com/questions/41569930
复制相似问题