首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >计算列百分比差异

计算列百分比差异
EN

Stack Overflow用户
提问于 2017-05-15 03:19:36
回答 1查看 90关注 0票数 1

我的df有超过2列(例如,4列)。我想计算第2-4列与第1列的百分比差异。

代码语言:javascript
复制
time1          time2            time3          time4
  1              5                1             10
  2              2                2              4
  3              6                3             12

我的代码是:

代码语言:javascript
复制
timepoint <- colnames(df)[2:4]
for (x in timepoint){
df$x <- 100*(df$x/df$time1-1)
}

这个for函数有什么问题?谢谢!

EN

回答 1

Stack Overflow用户

发布于 2017-05-15 07:56:07

也许这是一个太长的答案,但我认为这是一个开始

代码语言:javascript
复制
library(dplyr)
library(tibble)
library(tidyr)

df <- tribble(
  ~time1, ~time2, ~time3, ~time4,
  1, 5, 1, 10,
  2, 2, 2, 4,
  3, 6, 3, 12
)

df_tidy <- df %>% 
  mutate(id = 1:nrow(.)) %>% 
  gather(time, value, time1:time4) %>% 
  mutate(id_base = ifelse(time == "time1", TRUE, FALSE))

df_calc <- filter(df_tidy, id_base == FALSE)

df_base <- df_tidy %>% 
  filter(id_base== TRUE) %>% 
  select(id, value_base = value)

df_join <- df_calc %>% 
  left_join(
    df_base, 
    by = "id"
  )

df_join %>% 
  mutate(diff = (value / value_base) * 100)
# A tibble: 9 × 4
     id  time value  diff
  <int> <chr> <dbl> <dbl>
1     1 time2     5   500
2     2 time2     2   100
3     3 time2     6   200
4     1 time3     1   100
5     2 time3     2   100
6     3 time3     3   100
7     1 time4    10  1000
8     2 time4     4   200
9     3 time4    12   400
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43967925

复制
相关文章

相似问题

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