Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R pivot_较长的整齐数据集:多列为两列_R_Tidyverse - Fatal编程技术网

R pivot_较长的整齐数据集:多列为两列

R pivot_较长的整齐数据集:多列为两列,r,tidyverse,R,Tidyverse,我相信大家, 我目前正在学习R,并尝试使用tidyverse包中的pivot_longer()整理数据集 我有这张桌子 title actor_1 actor_2 actor_3 actor_1_FB_likes actor_2_FB_likes actor_3_FB_likes <chr> <chr> <chr> <chr>

我相信大家,

我目前正在学习R,并尝试使用tidyverse包中的pivot_longer()整理数据集

我有这张桌子

title               actor_1    actor_2    actor_3     actor_1_FB_likes actor_2_FB_likes actor_3_FB_likes
   <chr>               <chr>      <chr>      <chr>                  <dbl>            <dbl>            <dbl>
 1 Avatar              CCH Pound… Joel Davi… Wes Studi               1000              936              855
 2 Pirates of the Car… Johnny De… Orlando B… Jack Daven…            40000             5000             1000
 3 The Dark Knight Ri… Tom Hardy  Christian… Joseph Gor…            27000            23000            23000
 4 John Carter         Daryl Sab… Samantha … Polly Walk…              640              632              530
 5 Spider-Man 3        J.K. Simm… James Fra… Kirsten Du…            24000            11000             4000
 6 Tangled             Brad Garr… Donna Mur… M.C. Gainey              799              553              284
title actor_1 actor_2 actor_3 actor_1_FB_喜欢actor_2_FB_喜欢actor_3_FB_喜欢
1阿凡达CCH磅…乔尔·戴维斯…韦斯·斯图迪1000 936 855
两个汽车海盗…约翰尼·德…奥兰多B…杰克·达文…40000 5000 1000
3黑暗骑士里…汤姆·哈代·克里斯蒂安…约瑟夫·戈尔…27000 23000 23000
约翰·卡特·达里尔·萨布……萨曼莎……波利·沃克……640 632 530
5蜘蛛侠3 J.K.西姆…詹姆斯·弗拉…克尔斯滕·杜…24000 11000 4000
6缠结的布拉德·加尔…唐娜·穆尔…M.C.盖尼799 553 284
我想将其更改为以下格式:

      title          actor_name    num_likes   
       <chr>            <chr>      <dbl>
     1 Avatar        CCH Pounder   1000
     2 Avatar        Joel David Moore    936
     2 Avatar        Wes Studi      855    
title演员\u name num\u喜欢
1阿凡达CCH庞德1000
2阿凡达乔尔·大卫·摩尔936
2阿凡达韦斯研究855
等等。。。不幸的是我被卡住了。 无论我尝试什么,我都会以这种格式结束:

title          actor_num actor_name       actor_likes      num_likes
   <chr>       <chr>     <chr>            <chr>                <dbl>
 1 Avatar      actor_1   CCH Pounder      actor_1_FB_likes      1000
 2 Avatar      actor_1   CCH Pounder      actor_2_FB_likes       936
 3 Avatar      actor_1   CCH Pounder      actor_3_FB_likes       855
 4 Avatar      actor_2   Joel David Moore actor_1_FB_likes      1000
 5 Avatar      actor_2   Joel David Moore actor_2_FB_likes       936
 6 Avatar      actor_2   Joel David Moore actor_3_FB_likes       855
 7 Avatar      actor_3   Wes Studi        actor_1_FB_likes      1000
 8 Avatar      actor_3   Wes Studi        actor_2_FB_likes       936
 9 Avatar      actor_3   Wes Studi        actor_3_FB_likes       855
title actor\u num actor\u name actor\u likes num\u likes
1个阿凡达演员1个CCH庞德演员1个FB喜欢1000
2《阿凡达》演员1 CCH庞德演员2 FB喜欢936
3阿凡达演员1 CCH庞德演员3 FB喜欢855
4阿凡达演员乔尔·大卫·摩尔演员乔尔·大卫·摩尔喜欢1000
5《阿凡达》男演员乔尔·大卫·摩尔男演员乔尔·大卫·弗伯喜欢936
6《阿凡达》男演员乔尔·大卫·摩尔男演员乔尔·大卫·摩尔喜欢855
7《阿凡达》男主角3韦斯·斯图迪男主角1菲比喜欢1000
8《阿凡达》男主角3韦斯·斯图迪男主角2菲比喜欢936
9《阿凡达》男主角Wes Studi男主角喜欢855
我的最后一次尝试包括以下步骤:

exercise8 <- exercise8 %>% pivot_longer(cols= actor_1:actor_3, names_to='actor_num', values_to='actor_name')
exercise8 <- exercise8 %>% pivot_longer(cols= actor_1_FB_likes:actor_3_FB_likes, names_to='actor_likes', values_to='num_likes')
exercise8%pivot\u更长(cols=actor\u 1:actor\u 3,name\u to='actor\u num',value\u to='actor\u name')
练习8%支点(cols=actor\u 1\u FB\u likes:actor\u 3\u FB\u likes,name\u to='actor\u likes',value\u to='num\u likes')
我当然可以删除列actor_num和actor_likes,但这仍然不会产生所需的格式

有人能帮忙吗?我是一开始就完全错了,还是我错过了最后一步?
提前谢谢你

如果在列名称的末尾为name和like列提供一致的数值,可能会更容易

添加一行以重命名列名,并在结尾处始终使用“_1”、“_2”等

然后
pivot\u longer
使用regex模式在末尾假定数字

library(tidyverse)

names(df) <- sub("(\\d+)_(\\w*)", "\\2_\\1", names(df))

df %>%
  pivot_longer(starts_with("actor"), 
               names_to = c(".value", "group"),
               names_pattern = "(\\w+)_(\\d+)$")
库(tidyverse)
姓名(df)%
pivot_更长(以“演员”开头),
名称_to=c(“.value”,“group”),
名称\u模式=“(\\w+)\u(\\d+$”)
输出

# A tibble: 18 x 4
   title               group actor       actor_FB_likes
   <chr>               <chr> <chr>                <int>
 1 Avatar              1     CCH_Pound…            1000
 2 Avatar              2     Joel_Davi…             936
 3 Avatar              3     Wes_Studi              855
 4 Pirates_of_the_Car… 1     Johnny_De…           40000
 5 Pirates_of_the_Car… 2     Orlando_B…            5000
 6 Pirates_of_the_Car… 3     Jack_Daven…           1000
 7 The_Dark_Knight_Ri… 1     Tom_Hardy            27000
 8 The_Dark_Knight_Ri… 2     Christian…           23000
 9 The_Dark_Knight_Ri… 3     Joseph_Gor…          23000
10 John_Carter         1     Daryl_Sab…             640
11 John_Carter         2     Samantha_…             632
12 John_Carter         3     Polly_Walk…            530
13 Spider-Man_3        1     J.K._Simm…           24000
14 Spider-Man_3        2     James_Fra…           11000
15 Spider-Man_3        3     Kirsten_Du…           4000
16 Tangled             1     Brad_Garr…             799
17 Tangled             2     Donna_Mur…             553
18 Tangled             3     M.C._Gainey            284
#一个tible:18x4
标题组演员
1个阿凡达1立方厘米每磅…1000
2《阿凡达》2《乔尔·大卫》…936
3《阿凡达》3 Wes_Studi 855
4辆车的海盗…1辆约翰尼…40000
5辆车的海盗…2辆奥兰多…5000
6辆车的海盗…3辆杰克·达文…1000辆
7黑暗骑士…1汤姆哈代27000
8黑暗骑士2基督徒23000
9黑暗骑士…3约瑟夫·戈尔…23000
10约翰·卡特1达里尔·萨布……640
11约翰·卡特2萨曼莎·卡特632
12约翰·卡特3波利·沃克……530
13蜘蛛侠3 1 J.K.西姆…24000
14蜘蛛侠2詹姆斯·弗拉…11000
15蜘蛛侠3 Kirsten Du…4000
16缠结的布拉德·加尔…799
纠结的唐娜·穆尔…553
18缠结的3 M.C._Gainey284
数据

df <- structure(list(title = c("Avatar", "Pirates_of_the_Car…", "The_Dark_Knight_Ri…", 
"John_Carter", "Spider-Man_3", "Tangled"), actor_1 = c("CCH_Pound…", 
"Johnny_De…", "Tom_Hardy", "Daryl_Sab…", "J.K._Simm…", 
"Brad_Garr…"), actor_2 = c("Joel_Davi…", "Orlando_B…", 
"Christian…", "Samantha_…", "James_Fra…", "Donna_Mur…"
), actor_3 = c("Wes_Studi", "Jack_Daven…", "Joseph_Gor…", 
"Polly_Walk…", "Kirsten_Du…", "M.C._Gainey"), actor_1_FB_likes = c(1000L, 
40000L, 27000L, 640L, 24000L, 799L), actor_2_FB_likes = c(936L, 
5000L, 23000L, 632L, 11000L, 553L), actor_3_FB_likes = c(855L, 
1000L, 23000L, 530L, 4000L, 284L)), class = "data.frame", row.names = c(NA, 
-6L))

df你好,本,非常感谢!我遵循了你的解决方案,它成功了:)