在r中修改名称时,如何有条件地将df从长到宽进行争论?
我有一个类似于下面的纵向df,在每个就诊编号(在r中修改名称时,如何有条件地将df从长到宽进行争论?,r,dplyr,R,Dplyr,我有一个类似于下面的纵向df,在每个就诊编号(就诊)处,每个参与者(id)都有一行。每次就诊时记录相同的3个变量。我想让每个参与者都成为他们自己的一行, 但将值转换为宽格式。。。以及使新变量名保留原始变量名并将访问名附加到末尾。 我将不得不重复多次,因此我希望避免在事实发生后手动命名它们。想法 我尝试了dcast(),但似乎没有得到我想要的结果。我认为,pivot\u wider()可能在这里有作用,但无法理解 # CURRENT: # A tibble: 12 x 5 id vi
就诊
)处,每个参与者(id
)都有一行。每次就诊时记录相同的3个变量。我想让每个参与者都成为他们自己的一行,
但将值转换为宽格式。。。以及使新变量名保留原始变量名并将访问名附加到末尾。
我将不得不重复多次,因此我希望避免在事实发生后手动命名它们。想法
我尝试了dcast()
,但似乎没有得到我想要的结果。我认为,pivot\u wider()
可能在这里有作用,但无法理解
# CURRENT:
# A tibble: 12 x 5
id visit var1 var2 var3
<dbl> <txt> <dbl> <dbl> <dbl>
1 1 v1 1 1 1
2 1 v2 1 2 1
3 1 v3 2 2 1
4 2 v1 1 1 1
5 2 v2 1 2 1
6 2 v3 2 2 1
7 2 v4 2 2 2
8 3 v1 1 1 1
9 3 v2 1 2 1
10 3 v3 2 3 1
11 3 v4 2 3 2
12 3 v5 3 3 3
# DESIRED
# A tibble: 3 x 16
id var1_v1 var1_v2 var1_v3 var1_v4 var1_v5 var2_v1 var2_v2 var2_v3 var2_v4 var2_v5 var3_v1 var3_v2 var3_v3 var3_v4 var3_v5
<dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 1 1 1 3 NA NA 1 2 2 NA NA 1 1 1 NA NA
2 2 1 1 2 2 NA 1 2 2 2 NA 1 1 2 1 NA
3 3 1 1 2 2 3 1 2 3 3 3 1 1 1 2 3
#当前:
#一个tibble:12x5
id访问var1 var2 var3
11v11
2 1 v2 1 2 1
3 1 v3 2 2 1
4.2 v11
5 2 v2 1 2 1
6 2 v3 2 1
7 2 v4 2 2
8 3 v11
9 3 v2 1 2 1
10 3 v3 2 3 1
11 3 v4 2 3 2
12 3 v5 3 3 3
#渴望的
#一个tibble:3x16
id var1\u v1\u v2 var1\u v3 var1\u v4 var1\u v5 var2\u v3 var2\u v4 var2\u v5 var3\u v1\u v2 var3\u v3\u v4 var3\u v5
1 1 1 3钠钠1 2钠钠1 1钠钠
2 2 1 2 NA 1 2 2 NA 1 2 NA 1 1 1 2 NA
3 3 1 1 2 2 3 1 2 3 3 3 1 1 1 2 3
使用枢轴\u更宽的部分
:
tidyr::pivot_wider(df, names_from = visit, values_from = starts_with('var'))
# id var1_v1 var1_v2 var1_v3 var1_v4 var1_v5 var2_v1 var2_v2 var2_v3 var2_v4
# <int> <int> <int> <int> <int> <int> <int> <int> <int> <int>
#1 1 1 1 2 NA NA 1 2 2 NA
#2 2 1 1 2 2 NA 1 2 2 2
#3 3 1 1 2 2 3 1 2 3 3
# … with 6 more variables: var2_v5 <int>, var3_v1 <int>, var3_v2 <int>,
# var3_v3 <int>, var3_v4 <int>, var3_v5 <int>
使用
pivot\u更宽的:
tidyr::pivot_wider(df, names_from = visit, values_from = starts_with('var'))
# id var1_v1 var1_v2 var1_v3 var1_v4 var1_v5 var2_v1 var2_v2 var2_v3 var2_v4
# <int> <int> <int> <int> <int> <int> <int> <int> <int> <int>
#1 1 1 1 2 NA NA 1 2 2 NA
#2 2 1 1 2 2 NA 1 2 2 2
#3 3 1 1 2 2 3 1 2 3 3
# … with 6 more variables: var2_v5 <int>, var3_v1 <int>, var3_v2 <int>,
# var3_v3 <int>, var3_v4 <int>, var3_v5 <int>
在base R中,您可以使用:
reshape(df, timevar = "visit", dir="wide", sep="_")
在base R中,您可以使用:
reshape(df, timevar = "visit", dir="wide", sep="_")