如何使用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)
所需输出
尝试失败
df_wide <- pivot_wider(data = df1,
id_cols = id,
values_from = c("filename", "val"))
view(df_wide)
df_wide <- pivot_wider(data = df1,
id_cols = id,
names_from = c("filename", "val"),
values_from = c("filename", "val"))
view(df_wide)
最佳答案
我们需要一个行序列
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
指定为mutate
d原始数据集,并添加列“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/