谁能解释一下如何更改以下数据框中的负值?
我们被要求创建一个数据结构以获得以下输出。
# > 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。
我尝试了很多不同的方法,但无法让它发挥作用。当我尝试使用循环并且由于字母的原因时出现错误。
答案 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)))