gpt4 book ai didi

r - 将 R 数据框中的列表扩展到数据框中的其他行?

转载 作者:行者123 更新时间:2023-12-02 09:18:16 25 4
gpt4 key购买 nike

separate question earlier today中我问如何将嵌套列表展平为数据框中的一行。我希望进一步了解如何在数据框中操作我的列表,这次是通过在数据框中垂直扩展列表,添加新行来容纳数据。

在这种情况下,我希望采用这种结构:

CAT    COUNT            TREAT
A 1,2,3 Treat-a, Treat-b
B 4,5 Treat-c,Treat-d,Treat-e

对于这个结构:

CAT   COUNT  TREAT
A 1 Treat-a
A 2 Treat-b
A 3 NA
B 4 Treat-c
B 5 Treat-d
B NA Treat-e

生成测试(源)数据的代码:

df<-data.frame(CAT=c("A","B"))
df$COUNT <-list(1:3,4:5) # as numbers
df$TREAT <-list(paste("Treat-", letters[1:2],sep=""),paste("Treat-", letters[3:5],sep=""))

我尝试使用 CBIND 的方法类似于我之前问题提供的答案,但由于多个列表之间的值数量不同而失败。感谢您在我尝试掌握这些基本操作任务时的耐心等待。

最佳答案

这是我使用辅助函数 cbind.fill 得出的结果:( cbind a df with an empty df (cbind.fill?) )

cbind.fill <- function(...){
nm <- list(...)
nm <- lapply(nm, as.matrix)
n <- max(sapply(nm, nrow))
do.call(cbind, lapply(nm, function (x)
rbind(x, matrix(, n-nrow(x), ncol(x)))))
}

#Split df by CAT
df.split <- split(df, df$CAT)

#Apply cbind.fill to make a matrix filled with NA where needed
rawlist <- lapply(df.split, function(x) cbind(as.character(x$CAT), cbind.fill(unlist(x$COUNT), unlist(x$TREAT) ) ))

#Bind rows and convert matrix to data.frame
df.new <- as.data.frame(do.call(rbind, rawlist))

#Column names
colnames(df.new) <- names(df)

df.new
CAT COUNT TREAT
1 A 1 Treat-a
2 A 2 Treat-b
3 A 3 <NA>
4 B 4 Treat-c
5 B 5 Treat-d
6 B <NA> Treat-e

关于r - 将 R 数据框中的列表扩展到数据框中的其他行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34210669/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com