首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在R中动态计算列的百分比

在R中动态计算列的百分比
EN

Stack Overflow用户
提问于 2017-01-10 13:24:35
回答 2查看 69关注 0票数 1

这是我的资料

代码语言:javascript
复制
No col1 col2 col3 Total
1   5    8    9     70
2   3    4    11    80
.   .    .    .     .
.   .    .    .     .
10  6    1    15    90

这就是我想要达到的

代码语言:javascript
复制
 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      .      .       .

这就是我试过的

代码语言:javascript
复制
 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!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-01-10 14:08:08

我们可以用

代码语言:javascript
复制
DF1[paste0("p_", names(DF1)[2:4])] <- DF1[2:4]/DF1$Total
票数 3
EN

Stack Overflow用户

发布于 2017-01-10 13:29:11

这应该对你有用。您可以使用sapply来输入行,行除以总数。然后可以使用names为新创建的列分配名称。

代码语言:javascript
复制
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 = '')
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41569930

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档