Я пытаюсь добавить несколько столбцов на основе значения столбцов и проверки условий. Я получаю хорошие данные, но не могу добавить столбцы, может быть, это невозможно с apply (x, 1, fun), но только с применить (х, 2, весело)? Спасибо за ваше просветление
df <- data.frame(id = 411:420,
value = c(10,0,25,0,32,66,45,88,0,23),
prod = c(500,300,400,600,0,800,400,300,200,0)
)
add_coll <- function(x) {
if (x["value"] >0 & x["prod"] > 0) {
varname_v <- paste0("col_",x["id"],"_v")
varname_p <- paste0("col_",x["id"],"_p")
print(varname_v)
print(varname_p)
df[, varname_v] <- x["value"] #not working
df[, varname_p] <- 55 #not working
df$"test" <- 44 #not working
}
else {
print("not creating columns")
}
}
apply(df,1,add_coll )
это то, что я ожидаю:
df_expected <- data.frame(
"id" = 411:420,
"value" = c(10,0,25,0,32,66,45,88,0,23),
"prod" = c(500,300,400,600,0,800,400,300,200,0),
"col_411_v" = c(10,0,0,0,0,0,0,0,0,0),
"col_411_p" = c(500,0,0,0,0,0,0,0,0,0),
"col_413_v" = c(0,0,25,0,0,0,0,0,0,0),
"col_413_p" = c(0,0,400,0,0,0,0,0,0,0),
"col_416_v" = c(0,0,0,0,0,66,0,0,0,0),
"col_416_p" = c(0,0,0,0,0,800,0,0,0,0),
"col_417_v" = c(0,0,0,0,0,0,45,0,0,0),
"col_417_p" = c(0,0,0,0,0,0,400,0,0,0),
"col_418_v" = c(0,0,0,0,0,0,0,88,0,0),
"col_418_p" = c(0,0,0,0,0,0,0,300,0,0)
)
id value prod col_411_v col_411_p col_413_v col_413_p col_416_v col_416_p col_417_v col_417_p col_418_v col_418_p
1 411 10 500 10 500 0 0 0 0 0 0 0 0
2 412 0 300 0 0 0 0 0 0 0 0 0 0
3 413 25 400 0 0 25 400 0 0 0 0 0 0
4 414 0 600 0 0 0 0 0 0 0 0 0 0
5 415 32 0 0 0 0 0 0 0 0 0 0 0
6 416 66 800 0 0 0 0 66 800 0 0 0 0
7 417 45 400 0 0 0 0 0 0 45 400 0 0
8 418 88 300 0 0 0 0 0 0 0 0 88 300
9 419 0 200 0 0 0 0 0 0 0 0 0 0
10 420 23 0 0 0 0 0 0 0 0 0 0 0