我希望能够使用rbind数据帧,其中列是data.frame本身(而不是数据帧的列表)。
df <- data.frame(a = 1)
df$b <- data.frame(c = 2)
str(df)
# 'data.frame': 1 obs. of 2 variables:
# $ a: num 1
# $ b:'data.frame': 1 obs. of 1 variable:
# ..$ c: num 2
df2 <- data.frame(a = 3)
df2$b <- data.frame(c = 4)
rbind(df, df2)
# Error in `.rowNamesDF<-`(x, value = value) :
# duplicate 'row.names' are not allowed
# In addition: Warning message:
# non-unique value when setting 'row.names': ‘1’ 我知道dplyr::bind_rows(df, df),但我特别需要一个基R解决方案。
(我快速地看了一下bind_rows是如何做到的,但据我所知,它服从于C码 in vctrs::vec_rbind,这对我来说是不可逾越的。)
expected_output <- data.frame(a = c(1, 3))
expected_output$b <- data.frame(c = c(2, 4))
str(expected_output)
# 'data.frame': 2 obs. of 2 variables:
# $ a: num 1 3
# $ b:'data.frame': 2 obs. of 1 variable:
# ..$ c: num 2 4(上下文:这样的数据帧来自经过简化的jsonlite解析的API调用。虽然我可以避免它,但我很感激它的方便,我对这个问题很好奇。
发布于 2020-04-18 12:45:31
还可以使用unlist()
rbind(df, unlist(df2))
# a c
# 1 1 2
# 2 3 4注意:使用此路径,两个输入必须以相同的有意义的顺序拥有相同数量的cols。
发布于 2020-04-18 11:19:30
试一试
df[rep(1:nrow(df), 2),]但是,如果需要的话,您可能必须重命名行名。
发布于 2020-04-18 20:07:56
我们可以使用bind_rows (使用dplyr的开发版本)。
library(dplyr)
out <- bind_rows(df, df2)
out
# a c
#1 1 2
#2 3 4
str(out)
#'data.frame': 2 obs. of 2 variables:
#$ a: num 1 3
#$ b:'data.frame': 2 obs. of 1 variable:
# ..$ c: num 2 4https://stackoverflow.com/questions/61287625
复制相似问题