Использование r для чтения элементов вектора из 2 столбцов и возврата совпадений с соответствующим именем первого столбца - PullRequest
1 голос
/ 21 декабря 2011

Мне нужно взять вектор с двумя столбцами в r. В первом столбце у меня есть даты в формате 21.12.2011, а во втором столбце число 255.

Мне нужно взять число по своему выбору, скажем 255, и посмотреть, совпадает ли оно с какими-либо числами во втором столбце. Если он совпадает, мне нужно вернуть дату, с которой он совпал.

Я знаю о совпадении, подсчете и т. Д. Я просто не могу соединить это. Я новичок, возможно, это немного выходит за рамки моих возможностей, но я полагаю, что если я чему-то научусь, я буду намного лучше для этого.

Есть несколько частичных совпадений в вопросах, но ничего более подробного, чем я хочу.

Если у кого-нибудь есть примеры, которые меня научат, я был бы более чем счастлив. Если у вас есть ссылка в книге, я сделаю это сам, если вы скажете мне ссылку.

Большое спасибо. Я использую R 2.13.1 в среде Windows XP SP3.

Ответы [ 3 ]

2 голосов
/ 21 декабря 2011

Знакомство с индексированием в R поможет вам в этой задаче (и многих других) без необходимости в дополнительных функциях.Чтобы выбрать только определенные строки и столбцы в матрице или фрейме данных, используется формат x[rows,columns], в котором все поля, оставленные либо rows, либо columns, не отображаются.

В вашем случае это то, что мы могли бы сделать.Во-первых, давайте создадим пример матрицы (обратите внимание, что «вектор из 2 столбцов» на самом деле является матрицей):

x <- cbind(c("12/11/11", "12/10/11", "10/16/11",
 "11/07/11"), c(1, 255, 3, 255))

#     [,1]       [,2] 
#[1,] "12/11/11" "1"  
#[2,] "12/10/11" "255"
#[3,] "10/16/11" "3"  
#[4,] "11/07/11" "255"

Используя логический вектор в индексе строк, вы можете вернуть только те строки, которые содержат определеннуюзначение.Например, вот логический вектор для любой строки, где столбец 2 = 255:

x[,2] == 255

#[1] FALSE  TRUE FALSE  TRUE

При вставке этого логического вектора в индекс строки будут возвращены только строки, помеченные TRUE.

x[x[,2]==255,]

#     [,1]       [,2] 
#[1,] "12/10/11" "255"
#[2,] "11/07/11" "255"

Чтобы отображались только даты, укажите столбец 1 в индексе:

x[x[,2]==255,1]

#[1] "12/10/11" "11/07/11"
0 голосов
/ 21 декабря 2011

Также рассмотрите возможность использования merge, поместите ваш столбец значений поиска и свой столбец дат во фрейм данных, а затем объедините его с другим фреймом данных, который имеет значение, которое вы хотите найти (или набором значений, которые Вы хотите посмотреть вверх). По умолчанию он возвращает фрейм данных только с совпадающими значениями из обеих групп. Вы можете установить аргументы, чтобы оставить те, которые не совпадают, и у них будут отсутствующие значения, чтобы показать, что они не совпадают.

0 голосов
/ 21 декабря 2011

Возможно, вы захотите взглянуть на подмножество ().

> x1 <- rnorm(20)*10
> y1 <- rnorm(20)*5
> z1 <- cbind(round(abs(x1),0), round(abs(y1),0)) ## just creates 2 columns of data.
> z1 
      [,1] [,2]
 [1,]    9    1
 [2,]    6    6
 [3,]    3    7
 [4,]   10    0
 [5,]    9    2
 [6,]    7    7
 [7,]    7   10
 [8,]    3    1
 [9,]    6   10
[10,]    6    5
[11,]    0   11
[12,]    5    0
[13,]    0    8
[14,]    2    4
[15,]    1    2
[16,]    3    3
[17,]    9    7
[18,]   12    4
[19,]    1    1
[20,]    6    3
> ss1 <- subset(z1, z1[,2]==2) ## creates subset of 'z1' where column 2 equals 2.
> ss1    ## shows contents of ss1
     [,1] [,2]
[1,]    9    2
[2,]    1    2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...