Удалить столбцы на основе имен строк - PullRequest
2 голосов
/ 08 апреля 2020

У меня есть 2 фрейма данных, и я хотел бы удалить все столбцы в df1, имена которых соответствуют именам строк в df2.

df1

  GO_267 GO_345 GO_5 GO_2
a  0      1     1    1
b  0      1     1    1
c  0      1     1    1
d  0      1     1    1
e  0      1     1    1

df2

       z
GO_267 2
GO_345 3
GO_2   7


Ответы [ 3 ]

3 голосов
/ 08 апреля 2020

Вы можете использовать which для поднабора, используя список имен строк из второго фрейма данных в качестве источника имен столбцов для исключения.

df1[ , -which(names(df1) %in% row.names(df2)), drop=FALSE]
  GO_5
1    1
2    1
3    1
4    1
5    1

Данные:

df1 <- data.frame(GO_267=c(0,0,0,0,0), GO_345=c(1,1,1,1,1), GO_5=c(1,1,1,1,1),
                  GO_2=c(1,1,1,1,1))
df2 <- data.frame(z=c(2,3,7))
row.names(df2) <- c("GO_267", "GO_345", "GO_2")
3 голосов
/ 08 апреля 2020

Мы могли бы использовать setdiff:

df1[setdiff(names(df1), rownames(df2))]

#  GO_5
#a    1
#b    1
#c    1
#d    1
#e    1
0 голосов
/ 08 апреля 2020

Мы можем использовать select

library(dplyr)
df1 %>%
    select(-row.names(df2))

данные

df1 <- data.frame(GO_267=c(0,0,0,0,0), GO_345=c(1,1,1,1,1), GO_5=c(1,1,1,1,1),
                  GO_2=c(1,1,1,1,1))
df2 <- data.frame(z=c(2,3,7))
row.names(df2) <- c("GO_267", "GO_345", "GO_2")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...