R 将列拆分为几个变量,并将相应的值移动到新列
我有这样一个数据帧(包含更多行): 每个列名都包含有关3个变量的信息,这些变量之间用“u”分隔(每个变量有两个级别,分别命名为act/pas、l/q、n/p)。值是对应于每个变量组合的分数(即8个条件中的1个) 我需要将3个变量移动到3个单独的列中,用数字标记它们的级别,并将相应的值移动到称为“score”的单独列中。因此,从当前数据帧的第一行,我可以得到如下内容:R 将列拆分为几个变量,并将相应的值移动到新列,r,dplyr,R,Dplyr,我有这样一个数据帧(包含更多行): 每个列名都包含有关3个变量的信息,这些变量之间用“u”分隔(每个变量有两个级别,分别命名为act/pas、l/q、n/p)。值是对应于每个变量组合的分数(即8个条件中的1个) 我需要将3个变量移动到3个单独的列中,用数字标记它们的级别,并将相应的值移动到称为“score”的单独列中。因此,从当前数据帧的第一行,我可以得到如下内容: id score actpas lq pn 1 14 1 1 1 1 8
id score actpas lq pn
1 14 1 1 1
1 8 2 1 1
1 14 1 2 2
1 10 2 2 2
1 21 1 1 2
1 11 2 1 2
1 21 1 2 1
1 11 2 2 1
我曾尝试使用聚集和分离函数与dplyr进行争论,但我无法真正得到我需要的。对dplyr的帮助将是非常感激的 如果我理解清楚:
df<-read.table(textConnection(
"id,act_l_n,pas_l_n,act_q_p,pas_q_p,act_l_p,pas_l_p,act_q_n,pas_q_n
1,14,8,14,10,21,11,21,11
2,19,9,11,17,22,11,20,11"),
header=TRUE,sep=",")
library(tidyr)
library(dplyr)
gather(df,k,score,-id) %>% mutate(v1=1+as.integer(substr(k,1,3)=="pas")
,v2=1+as.integer(substr(k,5,5)=="q")
,v3=1+as.integer(substr(k,7,7)=="p")) %>%
select(-2) %>% arrange(id)
# id score v1 v2 v3
#1 1 14 1 1 1
#2 1 8 2 1 1
#3 1 14 1 2 2
#4 1 10 2 2 2
#5 1 21 1 1 2
#6 1 11 2 1 2
#7 1 21 1 2 1
#8 1 11 2 2 1
#9 2 19 1 1 1
#10 2 9 2 1 1
#11 2 11 1 2 2
#12 2 17 2 2 2
#13 2 22 1 1 2
#14 2 11 2 1 2
#15 2 20 1 2 1
#16 2 11 2 2 1
df%变异(v1=1+as.integer(substr(k,1,3)=“pas”)
,v2=1+as.整数(substr(k,5,5)=“q”)
,v3=1+as.integer(substr(k,7,7)=“p”)%>%
选择(-2)%>%arrange(id)
#id分数v1 v2 v3
#1 1 14 1 1 1
#2 1 8 2 1 1
#3 1 14 1 2 2
#4 1 10 2 2 2
#5 1 21 1 1 2
#6 1 11 2 1 2
#7 1 21 1 2 1
#8 1 11 2 2 1
#9 2 19 1 1 1
#10 2 9 2 1 1
#11 2 11 1 2 2
#12 2 17 2 2 2
#13 2 22 1 1 2
#14 2 11 2 1 2
#15 2 20 1 2 1
#16 2 11 2 2 1
如果我理解清楚:
df<-read.table(textConnection(
"id,act_l_n,pas_l_n,act_q_p,pas_q_p,act_l_p,pas_l_p,act_q_n,pas_q_n
1,14,8,14,10,21,11,21,11
2,19,9,11,17,22,11,20,11"),
header=TRUE,sep=",")
library(tidyr)
library(dplyr)
gather(df,k,score,-id) %>% mutate(v1=1+as.integer(substr(k,1,3)=="pas")
,v2=1+as.integer(substr(k,5,5)=="q")
,v3=1+as.integer(substr(k,7,7)=="p")) %>%
select(-2) %>% arrange(id)
# id score v1 v2 v3
#1 1 14 1 1 1
#2 1 8 2 1 1
#3 1 14 1 2 2
#4 1 10 2 2 2
#5 1 21 1 1 2
#6 1 11 2 1 2
#7 1 21 1 2 1
#8 1 11 2 2 1
#9 2 19 1 1 1
#10 2 9 2 1 1
#11 2 11 1 2 2
#12 2 17 2 2 2
#13 2 22 1 1 2
#14 2 11 2 1 2
#15 2 20 1 2 1
#16 2 11 2 2 1
df%变异(v1=1+as.integer(substr(k,1,3)=“pas”)
,v2=1+as.整数(substr(k,5,5)=“q”)
,v3=1+as.integer(substr(k,7,7)=“p”)%>%
选择(-2)%>%arrange(id)
#id分数v1 v2 v3
#1 1 14 1 1 1
#2 1 8 2 1 1
#3 1 14 1 2 2
#4 1 10 2 2 2
#5 1 21 1 1 2
#6 1 11 2 1 2
#7 1 21 1 2 1
#8 1 11 2 2 1
#9 2 19 1 1 1
#10 2 9 2 1 1
#11 2 11 1 2 2
#12 2 17 2 2 2
#13 2 22 1 1 2
#14 2 11 2 1 2
#15 2 20 1 2 1
#16 2 11 2 2 1
您能编辑问题使其更容易理解吗?您能编辑问题使其更容易理解吗?