/ / R: извличане на конкретни редове и колони от рамката на данните - r

R: извличане на конкретни редове и колони от рамката на данните - r

Опитвам се да опростя сценария, който използвам за извличане на конкретни редове и колони от голям кадър за данни и в отделен, така че след това мога да начертая графика. Досега използвах a for за да измъкнем по едно време и след това rbind() но аз мисля, че трябва да има по-добро решение. Надявам се, че мога да илюстрирам онова, което се опитвах да направя чрез представителен пример:

a <- rep(1:8, each=40)
b <- rep(rep(1:4, each=5), times=16)
c <- runif(320)
d <- runif(320)

df <- data.frame(a,b,c,d)

Това, което бих искал да направя, е да получа тези колони за конкретни стойности a и b, Така че реших, например, да извадя редове, където a е 1 или 2, мога да го направя с нещо като:

extract.a = c(1,2)
extractcolumns = c("a", "b", "c", "d")
extracted <- df[a == extract.a, extractcolumns]

(Останах в extractcolumns малко, въпреки че нямам нужда от него в този случай, но в реалния случай искам да отнеме 5 колони от 17). Проблемът е този вид работа, но отнема само всеки друг ред и ако се променя, за например,

extract.a = c(1,2,4)

След това отнема всеки трети ред. Аз не съм сигурен точно какво прави тук, така че аз съм остана на това как да го оправя.Какво бих искал да направя, е да изберете редове, където a е една от няколко ценности и b е също една от двете стойности. Нещо като:

 extract.b = c(1,4)
extracted <- df[a == extract.a & b == extract.b, extractcolumns]

... но очевидно това също не е вярно. Това например работи:

 extracted <- df[(a == 1 | a == 2 | a == 4) & (b == 1 | b == 3), extractcolumns]

Но бих искал да бъда в състояние да определя стойностите за a и b Бих искал някъде другаде, както аз направих по-горе.

Надявам се, че това е достатъчно ясно!

Отговори:

1 за отговор № 1

Решението е да се използва %in% оператор вместо == който може да изпълнява а многократни сравнение

df[a %in% extract.a & b %in% extract.b, extractcolumns]