R: найти конкретный элемент в списке фреймов данных и назначить его на colname и переключить элемент справа - PullRequest
0 голосов
/ 26 апреля 2019

Давайте составим список фреймов данных.

df1 <- data.frame(V1=c("a", "b", "c"),V2=c("d", "e","f"), V3=c("g","h","i"),V4=c("j","k","l"))
df2 <- data.frame(V1=c("m","n"), V2=c("o","p"), V3=c("q","r"))
l <-list(df1, df2)
> l
[[1]]
  V1 V2 V3 V4
1  a  d  g  j
2  b  e  h  k
3  c  f  i  l

[[2]]
  V1 V2 V3
1  m  o  q
2  n  p  r

В этом списке есть фрейм данных, который повернут, и имена столбцов являются элементом списка. Фрейм данных [[1]] просто повернулся и объединил фреймы данных (см. Рисунок). enter image description here Например, столбцы V1 и V3 содержат названия столбцов, а V2 и V4 являются переменными.

Я хотел бы запустить некоторый код, который соответствует одному из элементов из фреймов данных (ele - это вектор, содержащий имена первичного столбца):

ele <- c("a","b","c","g","h","i")

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

dfa<-data.frame(a="d")
> dfa
  a
1 d

Важно: обратите внимание, что list[[2]] не будет совпадать. Я предпочел бы выбрать метод loop / lappy и получить отдельные кадры данных, такие как dfa, dfb, dfc ...

1 Ответ

1 голос
/ 26 апреля 2019

Вы ищете что-то подобное?

df1[]=apply(df1,2,as.character)

setNames(as.data.frame(t(unlist(df1[,c(FALSE,TRUE)]))),
         unlist(df1[,c(TRUE,FALSE)]))

  a b c g h i
1 d e f j k l

Сначала мы изменим factors на character, так как factors не очень хорошо работает при манипулировании данными.Затем мы используем c(FALSE,TRUE) для выбора четных столбцов, которые являются содержимым dataframe, и присваиваем имена, которые являются коэффициентами (c(TRUE,FALSE))

edit

Проверка соответствия между ссылкой на имя для выполнения процесса.

ele <- c("a","b","c","g","h","i")

l = lapply(l, function(x){
  x[]=apply(x,2,as.character)

  if (any(unlist(x)%in%ele)){
    setNames(as.data.frame(t(unlist(x[,c(FALSE,TRUE)]))),
            unlist(x[,c(TRUE,FALSE)]))
  } else {NA}
})

l

[[1]]
  a b c g h i
1 d e f j k l

[[2]]
NULL

Если вы хотите удалить nulls, используйте l[lengths(l) != 0]

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