如何解决在R中通过不同的row.name合并两个data.frame
我有两个data.frames,我想通过row.names将它们连接在一起。但是row.names不相等,我试过了,但是没用
df1 <- data.frame(row.names = c('S.5.0U0','S.6.0U1','S.7.0U2','S.8.0U3'),vara=c(-1.2,15,8.5,0),varb=c(-29,29,2.6,5))
df2 <- data.frame(row.names = c('5U','6U','7U'),var1=c(-0.5,1.5,58),var2=c(-2.09,-12,2.6))
df1
vara varb
S.5.0U0 -1.2 -29.0
S.6.0U1 15.0 29.0
S.7.0U2 8.5 2.6
S.8.0U3 0 5
df2
var1 var2
5.U0 -0.5 -2.09
6.U1 1.5 -12.00
7.U2 58.0 2.60
merge <- df1 %>% mutate(name = case_when(
name == 'S.5.U' ~ '5U',name == 'S.6.U' ~ '6U',name == 'S.7.U' ~ '7U',T ~ name)) %>%
left_join(.,df2,by = 'name')
Error:Problem with `mutate()` input `name`. x Objekt 'name' not found i Input `name` is `case_when(...)`.
为什么这不起作用?为什么我找不到它,却找不到name
?
编辑: 输出应该像这样
merge
vara varb var1 var2
S.5.0U0 5U -1.2 -29 -0.5 -2.09
S.6.0U1 6U 15 29 1.5 -12
S.7.0U2 7U 8.5 2.6 58 2.6
我编辑了示例数据,因为我意识到它不适合实际数据。
解决方法
name
列不存在于您的数据中,您将它们作为行名。将行名设置为列,使用gsub
从中删除不需要的字符,然后加入数据。
library(dplyr)
library(tibble)
df1 %>%
rownames_to_column('name') %>%
mutate(name1 = gsub('[S.0]|\\d$','',name)) %>%
inner_join(df2 %>%
rownames_to_column('name'),by = c('name1' = 'name')) %>%
column_to_rownames('name')
# vara varb name1 var1 var2
#S.5.0U0 -1.2 -29.0 5U -0.5 -2.09
#S.6.0U1 15.0 29.0 6U 1.5 -12.00
#S.7.0U2 8.5 2.6 7U 58.0 2.60
如果数据与帖子不同,并且没有可用来匹配name
值的模式,我们也可以使用case_when
来单独匹配值。
df1 %>%
rownames_to_column('name') %>%
mutate(name1 = case_when(name == 'S.5.U' ~ '5U',name == 'S.6.U' ~ '6U',name == 'S.7.U' ~ '7U',name == 'S.8.U' ~ '8U',TRUE ~ name)) %>%
inner_join(df2 %>% rownames_to_column('name'),by = c('name1' = 'name')) %>%
column_to_rownames('name')
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。