[英]Save a data.frame of a list as a csv file in R
我有一個名為output
的對象,它data.frame
包含列表的data.frame
類。 我想知道是否可以將output
保存為 R 的csv
文件?
這是我的代碼:
d <- data.frame(list(A = c(kap = 2, sap = 3), B = c(kap = 1, sap = 4)))
d[] <- lapply(d, as.list) ## This step is required to show `TRUE` and `FALSE` in `output`
output <- data.frame(t(d), dap = c(T, F))
write.csv(output, "output.csv") # Error: unimplemented type 'list' in 'EncodeElement'
如果我們可以在轉置 'd' 后創建data.frame
,那么它也應該可以工作
output <- data.frame(t(d), dap = c(TRUE, FALSE))
row.names(output) <- NULL
所述lapply
在代碼的第二行上循環柱,然后再進行as.list
即其創建list
的lists
lapply(d, as.list)
#$A
#$A[[1]]
#[1] 2
#$A[[2]]
#[1] 3
#$B
#$B[[1]]
#[1] 1
#$B[[2]]
#[1] 4
當我們將它分配給 'd' 並保持相同的結構 ( []
) 時,它將保留為帶有list
列的data.frame
d[] <- lapply(d, as.list)
str(d)
#'data.frame': 2 obs. of 2 variables:
# $ A:List of 2 # each column is a `list`
# ..$ : num 2
# ..$ : num 3
# $ B:List of 2
# ..$ : num 1
# ..$ : num 4
現在,我們正在做rbind
rbind(d, dap = c(T, F))
# A B
#kap 2 1
#sap 3 4
#dap TRUE FALSE
和它的轉置,
output <- t(rbind(d, dap = c(T, F)))
output
# kap sap dap
#A 2 3 TRUE
#B 1 4 FALSE
這可能看起來像一個常規的 data.frame 輸出,但它不是
str(output)
#List of 6
# $ : num 2
# $ : num 1
# $ : num 3
# $ : num 4
# $ : logi TRUE
# $ : logi FALSE
# - attr(*, "dim")= int [1:2] 2 3
# - attr(*, "dimnames")=List of 2
# ..$ : chr [1:2] "A" "B"
# ..$ : chr [1:3] "kap" "sap" "dap"
再次用data.frame
str(data.frame(output))
#'data.frame': 2 obs. of 3 variables:
# $ kap:List of 2
# ..$ A: num 2
# ..$ B: num 1
# $ sap:List of 2
# ..$ A: num 3
# ..$ B: num 4
# $ dap:List of 2
# ..$ A: logi TRUE
# ..$ B: logi FALSE
仍然是一個帶有list
列的data.frame
。 一種選擇是遍歷list
, unlist
list
列並用data.frame
換data.frame
d <- data.frame(list(A = c(kap = 2, sap = 3), B = c(kap = 1, sap = 4)))
發生這種情況是因為數據框的某些列不是列而是列表類型,您可以通過取消嵌套數據來解決此問題;
您可以通過以下兩種方式進行操作;
# Creating data
d <- data.frame(list(A = c(kap = 2, sap = 3), B = c(kap = 1, sap = 4)))
d[] <- lapply(d, as.list) ## This step is required to show `TRUE` and `FALSE` in `output`
# Method one using dplyr (Recommended)
output <- dplyr::tibble(t(rbind(d, dap = c(T, F))))
# Method two unnesting data using tidyr
output <- tidyr::unnest(data.frame(t(rbind(d, dap = c(T, F)))))
# Output the data
write.csv(output, "output.csv")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.