Получение индекса элементов, принадлежащих общей группе в R - PullRequest
0 голосов
/ 07 сентября 2018

У меня есть следующий фрейм данных,

>df
  Label
0 control1
1 control1
2 control2
3 control2
4 control1

Чтобы получить индекс элементов с меткой control1 и control2, я делаю следующее

Index1 <- grep("control1",df[,1])
Index2 <- grep("control2",df[,1])

В приведенном выше синтаксисе метки control1 и control2 - это простота, упомянутая в команде.

Есть ли способ автоматически найти ярлыки? Причина в том, что фрейм данных, df, содержимое анализируется из разных входных файлов. Например, у меня мог бы быть другой фрейм данных, который читает

>df2
  Label
0 trol1
1 trol1
2 trol2
3 trol3
4 trol2

Есть ли способ создать список уникальных меток, присутствующих в столбце df?

Ответы [ 3 ]

0 голосов
/ 07 сентября 2018

Используя unique и which вы можете сделать:

df <- data.frame(Label = c("trol1", "trol1", "trol2", "trol3", "trol2"), stringsAsFactors=FALSE)
label_idx = list()
for(lbl in unique(df$Label)){
    label_idx[[lbl]] = which(df$Label == lbl)
}
label_idx

$`trol1`
[1] 1 2

$trol2
[1] 3 5

$trol3
[1] 4
0 голосов
/ 07 сентября 2018

Вы можете попробовать также

lapply(unique(df$Label), function(x) which(df$Label%in% x))

#with df
[[1]]
[1] 1 2 5

[[2]]
[1] 3 4

lapply(unique(df2$Label), function(x) which(df2$Label%in% x))
#with df2
[[1]]
[1] 1 2

[[2]]
[1] 3 5

[[3]]
[1] 4
0 голосов
/ 07 сентября 2018

Мы можем использовать split, чтобы получить список индексов в соответствии с уникальным Label

split(1:nrow(df), df$Label)

#$control1
#[1] 1 2 5

#$control2
#[1] 3 4

С df2

split(1:nrow(df2), df2$Label)

#$trol1
#[1] 1 2

#$trol2
#[1] 3 5

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