【问题标题】:Can I add data from a list to the columns of a dataframe我可以将列表中的数据添加到数据框的列中吗
【发布时间】:2020-12-31 08:47:07
【问题描述】:

我编写了代码以在 for 循环中从数据帧中提取数据并将其添加到列表中。像这样:

  list_vraag1 <- list()        
  for (i in seq(1,nrow(questionanswer),16)){        
    if (questionanswer$answer[i] == 1){        
     antwoord1 <- "Ja"
      } else if (questionanswer$answer[i+1] == 1){        
    antwoord1 <- "Nee"
      } else{        
       antwoord1 <- NA
      }          
      df <- append(list_vraag1, antwoord1)
    }

它给出了一个正确的列表(我为六个不同的问题创建了其中的 6 个),现在我尝试将它们添加到一个新的数据框中,我需要有 6 个不同的列,并且在每列下必须有一份完整的清单。这可能吗?当我尝试这个时,整个列表都出现在列名上。 有人对此有解决方案吗?

【问题讨论】:

标签: r list dataframe for-loop


【解决方案1】:

目前尚不完全清楚你在这里追求什么。每隔 16 行取一次对我来说有点令人费解,但我相信它在您的应用程序中很有用。我假设 questionanswer 是包含 1 或 0(或任何不等于 1)的向量或 tibble(数据帧)。 在这些假设下:

library(dplyr)
library(tibble)

questionanswer <- tibble(
  answer = sample(c(0, 1), replace = TRUE, size = 100)
)

out <- questionanswer %>%
  mutate(antwoord1 = case_when(answer == 1 ~ "Ja",
                               lead(answer, 1) == 1 ~ "Nee",
                               TRUE ~ "NA")) %>%
  slice(which(row_number() %% 16 == 1)) # slices every 16th row

好的,out 不是一个列表,而是一个小标题。但是我们可以很容易地将它强制到一个列表中。 lapply 在这里可能没有用,因为您使用的是 lead 函数((questionanswer$answer[i+1] 会查看下一个元素)。

使用 for 循环可能如下所示:

list_vraag1 <- list()        
index <- seq(1,nrow(questionanswer), by = 16)
for (i in seq_along(index)){   
  if (questionanswer$answer[index[i]] == 1){        
    antwoord1 <- "Ja"
  } else if (questionanswer$answer[index[i] + 1] == 1){        
    antwoord1 <- "Nee"
  } else{        
    antwoord1 <- NA
  }          
  list_vraag1[[i]] <- antwoord1
}

这将返回一个列表。这有帮助吗?

【讨论】:

    猜你喜欢
    • 2017-05-02
    • 1970-01-01
    • 1970-01-01
    • 2017-06-16
    • 2020-05-22
    • 2017-09-16
    • 1970-01-01
    • 2019-09-08
    • 2019-06-23
    相关资源
    最近更新 更多