首页 > 解决方案 > 将行值转换为 R 中的单独列

问题描述

我有一个数据集,可以提取感兴趣的变量,但在理想情况下它们将位于单独的列中时将它们排列成行。看起来像这样

GEOID NAME VARIABLE VALUE 00601 ZCTA5 00601 PCT023003 17285 2 00601 ZCTA5 00601 PCT023004 572 3 00601 ZCTA5 00601 PCT023006 5 4 00601 ZCTA5 00601 P004001 18570 5 00602 ZCTA5 00602 PCT023003 35980 6 00602 ZCTA5 00602 PCT023004 2210 7 00602 ZCTA5 00602 PCT023006 22 8 00602 ZCTA5 00602 P004001 41520

我想让 4 个变量代表 4 列,它们都与唯一的 ZCTA5 值相关联。我如何转换数据以适应该描述。抱歉措辞不佳。

标签: rdata-cleaning

解决方案


我们可以pivot_wider使用tidyr

library(tidyr)
pivot_wider(df1, names_from = VARIABLE, values_from = VALUE)
# A tibble: 2 x 6
#  GEOID NAME        PCT023003 PCT023004 PCT023006 P004001
#  <int> <chr>           <int>     <int>     <int>   <int>
#1   601 ZCTA5 00601     17285       572         5   18570
#2   602 ZCTA5 00602     35980      2210        22   41520

数据

df1 <- structure(list(GEOID = c(601L, 601L, 601L, 601L, 602L, 602L, 
602L, 602L), NAME = c("ZCTA5 00601", "ZCTA5 00601", "ZCTA5 00601", 
"ZCTA5 00601", "ZCTA5 00602", "ZCTA5 00602", "ZCTA5 00602", "ZCTA5 00602"
), VARIABLE = c("PCT023003", "PCT023004", "PCT023006", "P004001", 
"PCT023003", "PCT023004", "PCT023006", "P004001"), VALUE = c(17285L, 
572L, 5L, 18570L, 35980L, 2210L, 22L, 41520L)),
class = "data.frame", row.names = c("1", 
"2", "3", "4", "5", "6", "7", "8"))

推荐阅读