Подстановка номеров строк данных, хранящихся в списке, имеющих одинаковые значения целых чисел, хранящихся в списке - PullRequest
0 голосов
/ 25 января 2019

Я пока не очень знаком с обработкой фреймов данных, хранящихся в списке.

У меня есть список целых чисел, которые в основном представляют индекс строк двух фреймов данных (df_nameA, df_nameB):

str(list1)
List of 2
$ df_nameA  :int [1:3] 3 4 6
$ df_nameB  :int [1:3] 1 2 4

df_nameA
nrow  col1.  col 3
 1.    a.    A1
 2.    b.    A2
 3     c     B1
 4.    d     B2
 5.    e     C1
 6.    f     C2
df_nameB
nrow  col1.  col 3
 1.    g     D1
 2.    h     D2
 3     i     E1
 4.    l     E2
 5.    m     F1
 6.    n     F2
list2<-list(df_nameA, df_nameB)
str(list2)
List of 2  :  6 observation and 3 variables
  $:'dataframe'....

Требуемый вывод:

df_nameA
nrow  col1.  col 3 
 3     c     B1
 4.    d     B2
 6.    f     C2
df_nameB
nrow  col1.  col 3
 1.    g     D1
 2.    h     D2
 4.    l     E2

По сути, я хотел бы установить подкадры данных в list2 на основе значений, хранящихся в списке 1.

Я написал что-то вроде этогоно это, похоже, не работает:

for(i in seq_along(list1)){
  for(i in seq_along(list2)){
    lapply(list2, function(x) {return(x[x$nrow %in% list1[[i]],])})
  }}

Код, кажется, поднабор строк 1,2,4 из обоих фреймов данных. Любой совет по моему коду?

Ответы [ 2 ]

0 голосов
/ 25 января 2019

Вы можете использовать lapply следующим образом или цикл for, как показано ниже

lapply

names(list2) <- c("df_nameA", "df_nameB")
lapply(names(list2), function(x) list2[[x]][list2[[x]]$nrow %in% list1[[x]], ])

# [[1]]
#   nrow col1. col.3
# 3    3     c    B1
# 4    4     d    B2
# 6    6     f    C2
# 
# [[2]]
#   nrow col1. col.3
# 1    1     g    D1
# 2    2     h    D2
# 4    4     l    E2

for-loop

names(list2) <- c("df_nameA", "df_nameB")
for (x in names(list2)) {
  list2[[x]] <- list2[[x]][list2[[x]]$nrow %in% list1[[x]], ]
}

list2

# $`df_nameA`
#   nrow col1. col.3
# 3    3     c    B1
# 4    4     d    B2
# 6    6     f    C2
# 
# $df_nameB
#   nrow col1. col.3
# 1    1     g    D1
# 2    2     h    D2
# 4    4     l    E2

Данные
Данные в воспроизводимом формате:

list1 <- list(df_nameA = c(3, 4, 6), 
              df_nameB = c(1, 2, 4))

list2 <- list(data.frame(nrow = c(1, 2, 3, 4, 5, 6), 
                         col1. = c("a.", "b.", "c", "d", "e", "f"), 
                         col.3 = c("A1", "A2", "B1", "B2", "C1", "C2")), 
              data.frame(nrow = c(1, 2, 3, 4, 5, 6), 
                         col1. = c("g", "h", "i", "l", "m", "n"), 
                         col.3 = c("D1", "D2", "E1", "E2", "F1", "F2")))
0 голосов
/ 25 января 2019

Вы перезаписываете i во втором цикле: это может работать:

for(i in seq_along(list1)){
  list2[[i]][ list2[[i]]$nrow %in% list1[[i]],]
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...