如何更改数据框中的特定值

时间:2021-06-23 06:54:04

标签: r dataframe

谁能解释一下如何更改以下数据框中的负值?

我们被要求创建一个数据结构以获得以下输出。

# > df
#   x  y  z
# 1 a -2  3
# 2 b  0  4
# 3 c  2 -5
# 4 d  4  6

我的代码是:

df <- data.frame(x = letters[1:4], y = c(-2,0,2,4), z = c(3,4,-5,6))

然后我们必须使用控制流运算符和/或矢量化来仅将负值乘以 10。

我尝试了很多不同的方法,但无法让它发挥作用。当我尝试使用循环并且由于字母的原因时出现错误。

2 个答案:

答案 0 :(得分:1)

创建负值的索引并乘以 10,即

i1 <- which(df < 0, arr.ind = TRUE)
df[i1] <- as.numeric(df[i1]) * 10

#  x   y   z
#1 a -20   3
#2 b   0   4
#3 c   2 -50
#4 d   4   6

答案 1 :(得分:0)

首先找出数据框的数值列,并将负值乘以 10。

cols <- sapply(df, is.numeric)
#Multiply negative values by 10 and positive with 1
df[cols] <- df[cols] * ifelse(sign(df[cols]) == -1, 10, 1)
df

#  x   y   z
#1 a -20   3
#2 b   0   4
#3 c   2 -50
#4 d   4   6

使用 dplyr -

library(dplyr)

df <- df %>% mutate(across(where(is.numeric), ~. * ifelse(sign(.) == -1, 10, 1)))