将2列与Datar的其余部分互换
我有一个数据表:将2列与Datar的其余部分互换,r,dataframe,pivot,R,Dataframe,Pivot,我有一个数据表: Country AcctType Instrument Stream Line sum period Afghanistan A 1 D CFD DD 133 August2019 Afghanistan B 2 E CFD DD 108
Country AcctType Instrument Stream Line sum period
Afghanistan A 1 D CFD DD 133 August2019
Afghanistan B 2 E CFD DD 108 August2019
Afghanistan A 3 E CFD DD 108 September2019
Albania A 1 D CFD DD 374 August2019
Albania B 2 D CFD DD 400 September2019
我只想将sum和period列和group by country首先转换为以下列,以便输出如下所示:
Country AcctType Instrument Stream Line August2019 September2019
Afghanistan A 1 D CFD DD 133 -
Afghanistan A 3 E CFD DD 108 -
Afghanistan B 2 E CFD DD - 108
Albania A 1 D CFD DD 374 -
Albania B 2 D CFD DD - 400
我知道有一种使用dcast的方法,但我找不到那么多有用的文档
任何帮助都将不胜感激。一个快速解决方案是
library(tidyr)
df %>%
pivot_wider(
names_from = period,
values_from = sum
)
编辑:
#在另一个月添加一行
df%
支点更宽(
name_from=句点,
值\u from=sum
)
#一个tibble:6x8
#国家账户类型仪表流线2019年8月2019年9月2019年10月
#
#阿富汗A 1 D CFD DD 133纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳
#阿富汗B 2 E CFD DD 108 NA
#阿富汗A 3东CFD DD NA 108 NA
#阿尔巴尼亚A 1 D CFD DD 374 NA
#阿尔巴尼亚B 2 D CFD DD NA 400 NA
#安道尔C1 D CFD DD NA 107
一个快速解决方案是
library(tidyr)
df %>%
pivot_wider(
names_from = period,
values_from = sum
)
编辑:
#在另一个月添加一行
df%
支点更宽(
name_from=句点,
值\u from=sum
)
#一个tibble:6x8
#国家账户类型仪表流线2019年8月2019年9月2019年10月
#
#阿富汗A 1 D CFD DD 133 NA
#阿富汗B 2 E CFD DD 108 NA
#阿富汗A 3东CFD DD NA 108 NA
#阿尔巴尼亚A 1 D CFD DD 374 NA
#阿尔巴尼亚B 2 D CFD DD NA 400 NA
#安道尔C1 D CFD DD NA 107
我们可以使用数据表中的dcast
library(data.table)
dcast(setDT(df1), ... ~ period, value.var = 'sum')
# Country AcctType Instrument Stream Line August2019 September2019
#1: Afghanistan A 1 D CFD DD 133 NA
#2: Afghanistan A 3 E CFD DD NA 108
#3: Afghanistan B 2 E CFD DD 108 NA
#4: Albania A 1 D CFD DD 374 NA
#5: Albania B 2 D CFD DD NA 400
我们可以使用data.table中的dcast
library(data.table)
dcast(setDT(df1), ... ~ period, value.var = 'sum')
# Country AcctType Instrument Stream Line August2019 September2019
#1: Afghanistan A 1 D CFD DD 133 NA
#2: Afghanistan A 3 E CFD DD NA 108
#3: Afghanistan B 2 E CFD DD 108 NA
#4: Albania A 1 D CFD DD 374 NA
#5: Albania B 2 D CFD DD NA 400
非常感谢,这是一种享受,我给出的示例只是一个快照,实际上,表在这段时间内有更多的月份,使用您的脚本,它给出了我想要的输出,但日期不是按升序排列的,是否有一种方法可以指定?pivot\u
按照pivotting变量(在本例中为period
)上遇到类别的顺序创建月份列。我在上面的答案中给出了一个例子。因此,如果按时间顺序排列数据集,则应按时间顺序获得创建的列,如下所示well@r_mat还有,我不是乞求你,但是如果你觉得我的答案很有用,并且你已经对它投了更高的票,你能再次对它投上更高的票吗?因为在堆栈溢出上有一个问题:非常感谢,这很有效,我给出的示例只是一个快照,实际上,表在这段时间内有更多的月份,通过脚本,它给出了我想要的输出,但日期不是升序,是否有一种方法可以指定?pivot\u
按照pivotting变量(在本例中为period
)上遇到类别的顺序创建月份列。我在上面的答案中给出了一个例子。因此,如果按时间顺序排列数据集,则应按时间顺序获得创建的列,如下所示well@r_mat还有,我不是乞求你,但是如果你觉得我的答案很有用,并且你已经对它投了更高的票,你能再次对它投上更高的票吗?因为堆栈溢出存在以下问题: