Удалить столбцы на основе определенных критериев из нескольких фреймов данных с одинаковыми структурами столбцов - PullRequest
0 голосов
/ 10 мая 2018

У меня есть 4 кадра данных для 4 различных групп данных (всего 16 кадров данных) с одинаковой структурой столбцов, каждый из которых имеет столбцы a, b, c, d и т. Д. (Более сотни столбцов), но значения различны для каждой фрейм данных. Единственное, что является одинаковым, - это количество переменных и имен столбцов (в некоторой степени, но нет шаблона. Имена столбцов - это имена элементов, а не a, b, c и т. Д.) Для каждой «группы данных».

Например:

dat1 = data.frame(x = c(0.1,0.2,0.3,0.4,0.5),
                  y = c(0.6,0.7,0.8,0.9,0.10), 
                  z = c(0.12,0.13,0.14,0.15,0.16))    

, который производит

   x   y    z
1 0.1 0.6 0.12
2 0.2 0.7 0.13
3 0.3 0.8 0.14
4 0.4 0.9 0.15
5 0.5 0.1 0.16

и второй кадр данных

dat2 = data.frame(x = c(1,2,3,4,5), y = c(6,7,8,9,10), z = c(12,13,14,15,16))

  x  y  z
1 1  6 12
2 2  7 13
3 3  8 14
4 4  9 15
5 5 10 16

Я хочу выполнить очистку данных в dat1 на основе определенных критериев, например, если я удалю столбец x в dat1, тогда столбец x также будет удален в dat2. Эти конкретные критерии могут быть

dat1[,tail(dat1, n = 1) < 0.2] 

   y    z
1 0.6 0.12
2 0.7 0.13
3 0.8 0.14
4 0.9 0.15
5 0.1 0.16

такой, что dat2 также автоматически удаляет столбец x.

   y  z
1  6 12
2  7 13
3  8 14
4  9 15
5 10 16

Есть ли способ сделать это? Я пытался найти его в StackOverflow, но не смог найти ничего полезного. Благодарю.

1 Ответ

0 голосов
/ 10 мая 2018

Как-то так?
С данными, которые вы разместили, все работает как положено.

cols.to.remove <- function(DF1, DF2) {
    d <- setdiff(names(DF1), names(DF2))
    -which(d %in% names(DF1))
}


dat2 <- dat2[cols.to.remove(dat2, dat1)]
dat2
#   y  z
#1  6 12
#2  7 13
#3  8 14
#4  9 15
#5 10 16
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...