В R выберите элементы из столбца, если они занимают ту же строку, что и элементы другого столбца - PullRequest
0 голосов
/ 26 февраля 2019

Этот вопрос, вероятно, задавался в другом месте, но, поскольку я новичок в R и мой словарный запас ограничен, я не могу его найти.

Если у меня есть заполненный символом фрейм данных,скажем:

c1 <- c("aa", "bb", "cc", "dd", "ee")
c2 <- c("ff", "gg", "hh", "ii", "jj")
c3 <- c("kk", "ll", "mm", "nn", "oo")
c4 <- c("pp", "qq", "rr", "ss", "tt")
c5 <- c("uu", "vv", "ww", "xx", "yy")
df <- cbind.data.frame(c1, c2, c3, c4, c5)

, что приводит к

  c1 c2 c3 c4 c5
1 aa ff kk pp uu
2 bb gg ll qq vv
3 cc hh mm rr ww
4 dd ii nn ss xx
5 ee jj oo tt yy

И я хочу выбрать элементы из столбца 4, которые занимают ту же строку, что и несколько элементов из столбца 2 (скажем, «gg»), "ii" и "jj"), есть ли способ сделать это без использования разных команд для каждой?

Например,

df$c4[i = c(2,4,5)]

вернет

[1] qq ss tt
Levels: pp qq rr ss tt

и

df$c4[df$c2 == "gg"]

вернут

[1] qq
Levels: pp qq rr ss tt

, но когда я пытаюсь объединить их с

df$c4[i = c(df$c2=="gg", df$c2=="ii", df$c2=="jj")]

R, кажется, только частичнознать, что делать, возвращая

[1] qq   <NA> <NA>
Levels: pp qq rr ss tt

1 Ответ

0 голосов
/ 26 февраля 2019

Не уверен, что вы действительно хотите достичь, но в вашей последней строке это то, что вы на самом деле делаете:

> df$c4[i = c(df$c2=="gg", df$c2=="ii", df$c2=="jj")]
[1] "qq" NA   NA  
> i = c(df$c2=="gg", df$c2=="ii", df$c2=="jj")
> i
 [1] FALSE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE
[10] FALSE FALSE FALSE FALSE FALSE  TRUE
> df$c2
[1] "ff" "gg" "hh" "ii" "jj"

Вы передаете длину 15 логический вектор длине 5символьный вектор, который не имеет особого смысла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...