首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用数据帧列重新绑定数据帧

用数据帧列重新绑定数据帧
EN

Stack Overflow用户
提问于 2020-04-18 10:27:23
回答 3查看 106关注 0票数 1

我希望能够使用rbind数据帧,其中列是data.frame本身(而不是数据帧的列表)。

代码语言:javascript
复制
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,这对我来说是不可逾越的。)

代码语言:javascript
复制
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调用。虽然我可以避免它,但我很感激它的方便,我对这个问题很好奇。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-04-18 12:45:31

还可以使用unlist()

代码语言:javascript
复制
rbind(df, unlist(df2))
#   a c
# 1 1 2
# 2 3 4

注意:使用此路径,两个输入必须以相同的有意义的顺序拥有相同数量的cols。

票数 4
EN

Stack Overflow用户

发布于 2020-04-18 11:19:30

试一试

代码语言:javascript
复制
df[rep(1:nrow(df), 2),]

但是,如果需要的话,您可能必须重命名行名。

票数 1
EN

Stack Overflow用户

发布于 2020-04-18 20:07:56

我们可以使用bind_rows (使用dplyr的开发版本)。

代码语言:javascript
复制
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 4
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61287625

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档