我有2列的数据框:df$a
和df$b
。我需要df$c
基于df$b
使用2个独立条件集的值来计算列的值。应采用哪种条件取决于的值df$a
。
我试图通过编写嵌套if
else
语句来解决此问题。
# A subset of my data
a <- c(4211L, 2660L, 2839L, 3967L, 3167L, 2755L, 1680L, 2400L, 1173L, 1301L, 2370L, 2366L, 411L, 615L, 1382L, 826L, 717L, 401L, 177L, 82L, 579L, 246L)
b <- c(0.213, 0.102, 0.092, 0.121, 0.093, 0.0918, 0.0241, 0.060, 0.008, 0.003, 0.0385, 0.0368, -0.0529, -0.0697, 0.0192, -0.0346, -0.053, NA, -0.098, -0.139, -0.137, -0.0697)
df <- data.frame(a,b)
我想在何时使用第一组条件,在何时df$a <1000
使用第二组条件df$a>=1000
。这是我的代码:
df$c <- if (df$a < 1000) {
ifelse(df$b <= -0.2, '1',
ifelse(df$b > -0.2 & df$b <= -0.1, '2',
ifelse(df$b > -0.1 & df$b <= 0.0, '3',
ifelse(df$b > 0.0 & df$b <= 0.1, '4',
'5'))))
} else {
ifelse(df$b <= 0.0, '1',
ifelse(df$b > 0.0 & df$b <= 0.1, '2',
ifelse(df$b > 0.1 & df$b <= 0.2, '3',
ifelse(df$b > 0.2 & df$b <= 0.3, '4',
'5'))))
}
但是,代码将df$c
根据else
语句中的条件计算所有值,即使(df$a < 1000)
is为TRUE
。有谁知道是什么导致了这个错误?我收到以下警告消息:
Warning message:
In if (df$a < 1000) { :
the condition has length > 1 and only the first element will be used
您也可以使用ifelse
,因为if
它是非向量化的。我将使用一个函数cut
来简化代码:
a <- c(4211L, 2660L, 2839L, 3967L, 3167L, 2755L, 1680L, 2400L, 1173L, 1301L, 2370L, 2366L, 411L, 615L, 1382L, 826L, 717L, 401L, 177L, 82L, 579L, 246L)
b <- c(0.213, 0.102, 0.092, 0.121, 0.093, 0.0918, 0.0241, 0.060, 0.008, 0.003, 0.0385, 0.0368, -0.0529, -0.0697, 0.0192, -0.0346, -0.053, NA, -0.098, -0.139, -0.137, -0.0697)
df <- data.frame(a,b)
df$c <- ifelse(df$a < 1000,
cut(df$b, breaks = c(-Inf, -0.2, -0.1, 0.0, 0.1, +Inf),
labels = as.character(1:5)),
cut(df$b, c(-Inf, 0, 0.1, 0.2, 0.3, +Inf),
as.character(1:5)))
df
# a b c
# 1 4211 0.2130 4
# 2 2660 0.1020 3
# 3 2839 0.0920 2
# 4 3967 0.1210 3
# 5 3167 0.0930 2
# 6 2755 0.0918 2
# 7 1680 0.0241 2
# ....
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句