У меня есть такой data.frame:

a <- c(rep("1", 3), rep("2", 3), rep("3",3), rep("4",3), rep("5",3))
b <- c(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15)
df <-data.frame(a,b)
       a  b
1  1  1
2  1  2
3  1  3
4  2  4
5  2  5
6  2  6
7  3  7
8  3  8
9  3  9
10 4 10
11 4 11
12 4 12
13 5 13
14 5 14
15 5 15

Я хочу иметь что-то вроде этого:

a <- c(rep("2", 3), rep("3", 3))
b <- c(4,5,6,7,8,9)

dffinal<-data.frame(a,b)

  a b
1 2 4
2 2 5
3 2 6
4 3 7
5 3 8
6 3 9

Я могу использовать функцию "subset", но она не работает

sub <- subset(df,c(2,3) == a )

      a b
    5 2 5
    8 3 8

Эта команда принимает только одну строку "2" и "3" в столбце "a".

Какая-нибудь помощь?

cassius

Ответов: 3

Ответы (3)

Вы путаете == с %in%:

subset(df, a %in% c(2,3))
#   a b
# 4 2 4
# 5 2 5
# 6 2 6
# 7 3 7
# 8 3 8
# 9 3 9

а как насчет этого?

library(dplyr)
df %>% filter(a == 2 | a==3)
  a b
1 2 4
2 2 5
3 2 6
4 3 7
5 3 8
6 3 9

Мы можем использовать data.table. Мы преобразуем 'data.frame' в 'data.table' (setDT(df)), установим 'key' в качестве столбца 'a', затем выполним подмножество строк.

library(data.table)
setDT(df, key= 'a')[c('2','3')]
#   a b
#1: 2 4
#2: 2 5
#3: 2 6
#4: 3 7
#5: 3 8
#6: 3 9

2022 WebDevInsider