У меня есть 2 файла:R: сравнение с несколькими значениями
eg
V1 V2 V3 V4 V5 V6 V7 V8 V9
1 0.066 0.71125 1.77 0.5045 0.7417104 1.584007 0.872757 1.729945 4
2 0.500 6.07500 20.30 1.7500 9.5017100 17.255490 11.180490 6.388851 4
3 0.670 0.67000 0.67 0.6700 0.0000000 0.670000 0.670000 0.000000 1
и
kl
I II III IV
1 0.80 0.60 0.40 0.20
2 0.75 0.55 0.35 0.15
3 65.60 50.70 38.80 24.00
, которые я хотел сравнить все строки V2 из «например,» со всеми компетентно строк из «kl», «потому что мне нужно (в результате) оценить, какая строка получила класс (I, II, III, IV или V для остальных) в следующем столбце. .
if eg[1,2] >= kl[1,1] --> I
if eg[1,2] >= kl[2,1] --> II
if eg[1,2] >= kl[3,1] --> III
if eg[1,2] >= kl[4,1] --> IV
else --> V
и то же самое, например, для [2,2] и, например, [3,2].
я починил свой первый цикл и итерации, как это, но (конечно) не работает ...:
eg <- read.csv("eg.csv", header=F, sep=";")
eg <- eg[, -c(1,3,4,5,6,7,8,9)]
eg <- t(eg)
as.numeric(as.character(eg))
for (i in eg) {
if (is.na(eg[i,1]) || eg[i,1] == "NA") {
cat(("0"), sep=";")
} else if (eg[i,1] >= kl[i,1]) {
cat(("1"), sep=";")
} else if (eg[i,1] >= kl[i,2]) {
cat(("2"), sep=";")
} else if (eg[i,1] >= kl[i,3]) {
cat(("3"), sep=";")
} else if (eg[i,1] >= kl[i,4]) {
cat(("4"), sep=";")
} else {
cat(("5"), sep=";")
next}
}
R возвращает хорошие значения только для двух первой линии, то он пишет:
00Error in if (is.na(eg[i, 1]) || eg[i, 1] == "NA") { :
missing value where TRUE/FALSE needed
Но когда я делаю то же для каждой строки отдельно - это сработало. ТЕПЕРЬ НЕ :(
Пожалуйста, помогите мне И спасибо
В вашем псевдокоде все условия '' ', а в вашем цикле некоторые из них' <'. Какой класс действителен, когда значение из' eg $ V2' соответствует нескольким классам из 'kl'? Кроме того, в вашем цикле' for', Я предполагаю, что это должно быть: 'for (i in 1: length (например, [, 2])) {'. –