【发布时间】:2022-09-26 05:41:43
【问题描述】:
我试图弄清楚如何在以下示例中使用来自tidyr 的pivot_longer。这就是名为dat_plot 的原始表的结构如下:
year organizational_based action_based ideological_based share_org_based share_ideo_based share_act_based
<dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 1956 1 0 0 2 95 95
2 2000 0 0 0 92 87 91
也在这里:
dat_plot <- structure(list(year = c(1956, 2000), organizational_based = c(1,
0), action_based = c(0, 0), ideological_based = c(0, 0), share_org_based = c(2,
92), share_ideo_based = c(95, 87), share_act_based = c(95, 91
)), row.names = c(NA, -2L), class = c(\"tbl_df\", \"tbl\", \"data.frame\"
))
我想通过以下方式将其转换为长格式:
year based based_value share share_value
1 1956 organizational 1 org_based 2
2 1956 action 0 ideo_based 95
3 1956 ideological 0 act_based 95
4 2000 organizational 0 org_based 92
5 2000 action 0 ideo_based 87
6 2000 ideological 0 act_based 91
或者,使用dput:
solution <- structure(list(year = c(1956, 1956, 1956, 2000, 2000, 2000),
based = c(\"organizational\", \"action\", \"ideological\", \"organizational\",
\"action\", \"ideological\"), based_value = c(1, 0, 0, 0, 0,
0), share = c(\"org_based\", \"ideo_based\", \"act_based\", \"org_based\",
\"ideo_based\", \"act_based\"), share_value = c(2, 95, 95, 92,
87, 91)), class = \"data.frame\", row.names = c(NA, -6L))
我以为我必须与names_pattern 合作,我尝试过的是这样的,但是如果您尝试一下,您会发现这不是我想要的:
pivot_longer(data=dat_plot, cols=c(\"share_org_based\", \"share_ideo_based\", \"share_act_based\",
\"organizational_based\", \"action_based\", \"ideological_based\"),
names_pattern = c(\"(share_[A-Za-z]+)([A-Za-z]+_based)\"),
names_to = c(\"share\", \".value\"),
values_to = \"value\")
我很感激任何关于names_pattern 工作方式的线索,或者我错过了什么。
-
您可能遇到麻烦的一个地方是您的列名不完全匹配,例如您希望 \"organizational\" 和 \"org\" 匹配。您可能还希望将列类型标记为共享或基于:现在您标记了共享,但没有标记其他。为此,您可能需要先重命名列。为什么你有行动与思想相结合,思想与行为相结合?
标签: r dataframe pivot-table tidyr data-manipulation