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

3

R数据集

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))

需要的结果

title          A(value)     B(value)     C(value)    
Iliad           -1194           -44          55
Odyssey         -800            -29         -700

任何人都能帮助我获得所需的结果吗?

不错的可重现示例!下次我鼓励你尝试用文字描述你想要做什么。 - Gregor Thomas
您正在尝试将三个数据框合并 - smci
3个回答

3
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)"添加到列名中。我将把这个决定留给你(不过我认为在列名中包含括号是一个不好的主意)。


感谢Gregor提供的解决方案和快速响应。 - Janjua

1

这样的东西在基础 R中也应该能够工作:

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
这是一个涉及编程的基于 base R 的选项,其中包含 mergeReduce。请保留 HTML 格式。
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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接