[英]Conditional replacement in columns - R
我想通過從現有列“ a”中減去值“ z”來創建新列“ b”。 但是,在“ a”列中的值為0的情況下,我想將其保持為0。
我嘗試了以下創建新列y的操作,然后要求編譯器將新列中的值更改為0(如果它們的值與0-z相同)。
我收到一條錯誤消息時似乎無法使它正常工作
"Error in `$<-.data.frame`(`*tmp*`, "b", value = c(66, 69, 71, 72, 66, :
replacement has 55 rows, data has 16"
這是我的數據:
a
11
14
16
17
11
5
0
0
0
0
0
5
7
13
15
17
這是我的代碼:
z <- -55
data$y <- (0 - z)
data$b <- (data$a - z)
data$b[data$y]<- 0
plot(data$b)
該錯誤是由於使用data$y
作為索引引起的。 相反,您需要將data$b
與data$y
進行比較:
data$y <- (0 - z)
data$b <- (data$a - z)
data$b[data$b == data$y] <- 0 # changed line
但是您可以使用單個命令創建新的列b
:
data$b <- data$a - z * as.logical(data$a)
data$b = ieflse(data$a != 0, data$a - z, 0)
嘗試這個:
#dummy data
df <- read.table(text="
a
11
14
16
17
11
5
0
0
0
0
0
5
7
13
15
17",header=T)
#assing z
z <- -55
#subtract with condition
df$b <- ifelse(df$a==0, df$a, df$a - z)
#output
df
# a b
# 1 11 66
# 2 14 69
# 3 16 71
# 4 17 72
# 5 11 66
# 6 5 60
# 7 0 0
# 8 0 0
# 9 0 0
# 10 0 0
# 11 0 0
# 12 5 60
# 13 7 62
# 14 13 68
# 15 15 70
# 16 17 72
這是您數據的可復制版本:
n <- 16
z <- -55
data <- data.frame(
a = ifelse(runif(n) > 0.5, rnorm(n), 0)
)
您可以使用ifelse
為提供不同的值b
,根據價值a
。 使用with
函數可以訪問數據框內的變量,從而不必多次鍵入data
。
data$b <- with(data, ifelse(a == 0, 0, a - z))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.