r - 使用 R tidyrivot_wide 从多个列名称和值获取宽格式数据

标签 r tidyr

如何使用tidyr pivot_wide将此数据框从长格式转换为宽格式?我尝试应用文档页面上的示例,但我一定错过了一些东西。

数据框

id <- c(1,1,2,2,3,3)
filename <- c('file1a.txt', 'file1b.txt', 
              'file2a.txt', 'file2b.txt', 
              'file3a.txt', 'file3b.txt')
val <- c(832, 834, 221, 878, 2, 19)

df1 <- data.frame(id, filename, val)
view(df1)
<表类=“s-表”> <标题> id 文件名 值 <正文> 1 文件1a.txt 832 1 文件1b.txt 834 2 文件2a.txt 221 2 file2b.txt 878 3 file3a.txt 2 3 file3b.txt 19

所需输出

<表类=“s-表”> <标题> id 文件名1 文件名2 val1 val2 <正文> 1 文件1a.txt 文件1b.txt 832 834 2 文件2a.txt file2b.txt 221 878 3 file3a.txt file3b.txt 2 19

尝试失败

df_wide <- pivot_wider(data = df1, 
                       id_cols = id, 
                       values_from = c("filename", "val"))
view(df_wide)
<表类=“s-表”> <标题> id 文件名_ val_ <正文> 1 1:2 c(832,834) 2 3:4 c(221,878) 3 5:6 c(2,19)
df_wide <- pivot_wider(data = df1, 
                       id_cols = id, 
                       names_from = c("filename", "val"), 
                       values_from = c("filename", "val"))
view(df_wide)
<表类=“s-表”> <标题> id filename_file1a.txt_832 filename_file1b.txt_834 filename_file2a.txt_221 ...等等 <正文> 1 文件1a.txt 文件1b.txt 不适用 ...等等 2 不适用 不适用 文件2a.txt ...等等 3 不适用 不适用 不适用 ...等等

最佳答案

我们需要一个行序列

library(dplyr)
library(tidyr)
library(data.table)
df1 %>%
    mutate(cn = rowid(id)) %>% 
    pivot_wider(names_from = cn, values_from = c(filename, val), names_sep="")

-输出

# A tibble: 3 x 5
#     id filename1  filename2   val1  val2
#  <dbl> <chr>      <chr>      <dbl> <dbl>
#1     1 file1a.txt file1b.txt   832   834
#2     2 file2a.txt file2b.txt   221   878
#3     3 file3a.txt file3b.txt     2    19

或者按row_number进行分组

df1 %>%
    group_by(id)
    mutate(cn = row_number()) %>% 
    pivot_wider(names_from = cn, values_from = c(filename, val), names_sep="")

如果我们不需要使用%>%,请将data指定为mutated原始数据集,并添加列“cn”基于'id'的序列

pivot_wider(mutate(df1, cn = rowid(id)), 
   names_from = cn, values_from = c(filename, val), names_sep="")

关于r - 使用 R tidyrivot_wide 从多个列名称和值获取宽格式数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67561552/

相关文章:

R:再次出现数字时如何获取Row sequential ID?

r - 为多个读者整理重复的类内相关性

r - 转换具有不同数量元素的嵌套数据框

r - dplyr 在链中使用 $ 获得最终值(value),例如mtcars %>% 选择(mpg)$mpg

html - 文档深度过大:R 中 xml2::read_html() 的 XML_PARSE_HUGE 选项

r - 为 ggplot 2.2.0 破坏的 gtable_add_grob 代码寻求解决方法

angularjs - Web抓取在R中动态加载数据

r - 在R中,有一种方法可以使用带有任意参数的pivot_longer作为cols规范

r - 使用 R 中的 dplyr 对所有变量组合求和