首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >数据框排列/重新排列和删除重复列

数据框排列/重新排列和删除重复列
EN

Stack Overflow用户
提问于 2017-03-14 02:59:05
回答 3查看 81关注 0票数 3

R数据集

代码语言:javascript
复制
x <- data.frame(term = c("A", "B", "C"))
x$points <- list(
  data.frame(title=c("Iliad", "Odyssey"), value=c(-1194, -800)),
  data.frame(title=c("Iliad", "Odyssey"), value=c(-44, -29)),
  data.frame(title=c("Iliad", "Odyssey"), value=c(55, -700))
)

cat(toJSON(x, pretty=TRUE))

所需结果

代码语言:javascript
复制
title          A(value)     B(value)     C(value)    
Iliad           -1194           -44          55
Odyssey         -800            -29         -700

任何人都可以帮助我得到所需的结果

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-03-14 03:04:44

代码语言:javascript
复制
library(tidyr)
unnest(x, points) %>%
    spread(key = term, value = value)
#     title     A   B    C
# 1   Iliad -1194 -44   55
# 2 Odyssey  -800 -29 -700

当然,您可以使用paste"(value)"字符串添加到列名中。我将把这个问题留给您(尽管我认为在列名中包含括号不是一个好主意)。

票数 3
EN

Stack Overflow用户

发布于 2017-03-14 03:33:38

类似这样的代码在base R中也应该可以工作

代码语言:javascript
复制
cbind.data.frame(title=x$points[[1]][,1], 
         do.call(cbind, lapply(1:length(x$term), 
                        function(i) setNames(data.frame(x$points[[i]][,2]), x$term[i]))))

#    title     A   B    C
#1   Iliad -1194 -44   55
#2 Odyssey  -800 -29 -700
票数 1
EN

Stack Overflow用户

发布于 2017-03-14 11:29:40

以下是mergeReducebase R选项

代码语言:javascript
复制
setNames(Reduce(function(...) merge(..., by = 'title'), x$points), 
                         c('title', as.character(x$term)))
#    title     A   B    C
#1   Iliad -1194 -44   55
#2 Odyssey  -800 -29 -700
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42771419

复制
相关文章

相似问题

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