Я хочу создать новый столбец, в котором я назначаю значение, наиболее близкое к значениям списка, на основе другого столбца. Это мои данные:
df <- data.frame(AV=c("A", "A", "A", "A", "A", "B", "B", "B", "B"),
var=c( 0.1, 0.2, 1.5, 1.8, 8, 1, 1.4, 13, 3))
x <- c(0.5, 1, 2, 5, 10, 20, 40, 80)
for (i in df$var){
res <- x[which.min(abs(x - i))]
print(res)}
[1] 0.5
[1] 0.5
[1] 1
[1] 1
[1] 10
[1] 1
[1] 1
[1] 10
[1] 2
Однако я хочу, чтобы res
был новым столбцом в моем фрейме данных и боролся за его реализацию.
- Этот подход не работать, потому что он не перебирает каждую строку, я думаю?
f = function(x){x[which.min(abs(x - i))]}
for (i in df$var){
df$res <- apply(df, 1, f)
}
Включение столбца в l oop тоже не сработало:
f = function(x){x[which.min(abs(x - i))]}
for (i in df$var_floor){
for (j in df$var_floor){
df$res <- apply(df, 1, f)
}
#Leads to: Error in x - i : non-numeric argument to binary operator
Я пытался сделать это с apply:
f = function(x){x[which.min(abs(x - i))]}
for (i in df$var){
res <- apply(df, 1, f)
}
#Leads to: Error in x - i : non-numeric argument to binary operator
Применение без for loop
тоже не сработало.
Как назначить ближайшее значение для каждого строка