【问题标题】:Indexing within a dataframe在数据框中建立索引
【发布时间】:2022-01-24 01:01:27
【问题描述】:

任务是将“df”中的所有负数乘以 10。

所以我只能将所有内容乘以 10,但是当我添加一个 if 语句时,一切都会停止工作。

df =

x <- c('a', 'b', 'c', 'd', 'e')
y <- c(-4,-2,0,2,4)
z <- c(3, 4, -5, 6, -8)
# Join the variables to create a data frame

df <- data.frame(x,y,z)
df
##
  x  y  z
1 a -4  3
2 b -2  4
3 c  0 -5
4 d  2  6
5 e  4 -8

到目前为止我的代码

df2 <- df
df2


for(i in 2:ncol(df2)) {       
  df2[ , i] <- df2[ , i] *10
}
df2

【问题讨论】:

    标签: r dataframe for-loop if-statement


    【解决方案1】:
     cbind(df[1], 10^(df[-1] < 0) * df[-1])
    
      x   y   z
    1 a -40   3
    2 b -20   4
    3 c   0 -50
    4 d   2   6
    5 e   4 -80
    

    【讨论】:

      【解决方案2】:

      您可以使用dplyr 函数mutateacross 实现此目的。

      library(dplyr) # install if required
      
      df %>% 
        mutate(across(-x, ~ifelse(. < 0, 10 * ., .)))
      

      这表示“对于除 x 之外的所有列,如果值为

      结果:

        x   y   z
      1 a -40   3
      2 b -20   4
      3 c   0 -50
      4 d   2   6
      5 e   4 -80
      

      【讨论】:

        猜你喜欢
        • 2019-02-24
        • 1970-01-01
        • 2018-02-24
        • 2021-11-30
        • 1970-01-01
        • 2015-12-29
        • 1970-01-01
        • 1970-01-01
        • 2021-02-25
        相关资源
        最近更新 更多