R pivot_较长的整齐数据集:多列为两列
我相信大家, 我目前正在学习R,并尝试使用tidyverse包中的pivot_longer()整理数据集 我有这张桌子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>
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你好,本,非常感谢!我遵循了你的解决方案,它成功了:)